Hibernate 刷新前管理持久上下文
将hibernate链接和JTA视为持久性提供者。我怎么能强迫他们不冲洗任何东西,并且自己处理呢Hibernate 刷新前管理持久上下文,hibernate,orm,jpa,jakarta-ee,ejb-3.0,Hibernate,Orm,Jpa,Jakarta Ee,Ejb 3.0,将hibernate链接和JTA视为持久性提供者。我怎么能强迫他们不冲洗任何东西,并且自己处理呢 @Stateless public class SomeBean{ @PersistenceContext EntityManager em; public void method(){ em.persist(entity); // will get managed em.clear(); // everything gets unmanaged } } 我希望没
@Stateless
public class SomeBean{
@PersistenceContext
EntityManager em;
public void method(){
em.persist(entity); // will get managed
em.clear(); // everything gets unmanaged
}
}
我希望没有任何东西被刷新到数据库中,但正如我在mysql shell中看到的那样。那么,如何强制EntityManager
在persist之后不刷新任何内容呢?
谢谢persistence.xml
完整性
org.hibernate.ejb.HibernatePersistence
jdbc/fotbalDataSource
我怎么能强迫他们不冲洗任何东西,并且自己处理呢
@Stateless
public class SomeBean{
@PersistenceContext
EntityManager em;
public void method(){
em.persist(entity); // will get managed
em.clear(); // everything gets unmanaged
}
}
如中所述,如果要避免在提交JTA事务(在EJB方法末尾)之前进行任何自动刷新,请使用em.setFlushMode(FlushType.COMMIT)
。请记住,提交时将有一个刷新
我希望没有任何东西被刷新到数据库中,但正如我在mysql shell中看到的那样
我不认为你展示的代码说明了上述问题,这是一个不同的问题。无论如何在进一步讨论之前,以下是JPA规范中关于clear()
的内容:
因此,clear()
会导致所有托管实体变得分离,而不是非托管
换句话说,虽然规范对您的用例有点模糊,但我不认为调用clear()
会使传递给代码片段中persist()
的实体再次成为新的实体
明天我将对此进行更广泛的测试(即使我认为这个用例没有多大意义),并将更新我的答案。它看起来像一个hibernate bug。在我切换到eclipselink之后,它就像expected@coubeatczech有趣。我真的很想知道这是一个bug还是对规范解释的不同。是你造成了Jira问题吗?@coubatech,不知怎的,我不相信你“期望”的行为是正确的。JPA规范没有定义任何新的->管理的->新的转换。因为NEW->MANAGED->DETACHED需要在分离实体之前使实体持久化,所以我认为Hibernate实际上更正确。
/**
* Clear the persistence context, causing all managed
* entities to become detached. Changes made to entities that
* have not been flushed to the database will not be
* persisted.
*/
public void clear();