Hibernate 刷新前管理持久上下文

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 } } 我希望没

将hibernate链接和JTA视为持久性提供者。我怎么能强迫他们不冲洗任何东西,并且自己处理呢

@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();