Hibernate:commit()之后的实体分离

时间:2016-11-23 10:07:16

标签: java hibernate detach

我在代码中收到了以下错误消息,因为我从不手动调用 $table_records = TableName::where(DB::raw("year(from_date)"), '=', date('Y')) ->orWhere(DB::raw("year(to_date)"), '=', date('Y')) ->orderBy('from_date')->get(); 命令:

detach()

我的实体使用

持久化
org.hibernate.PersistentObjectException: detached entity passed to persist: my.entity

在文献中,我发现提示try { entityManager.getTransaction().begin(); entityManager.persist(item); entityManager.getTransaction().commit(); } catch(final Exception e) { entityManager.getTransaction().rollback(); LOGGER.err("Error at persist."); throw new Exception(); } 自动分离了javax.persistence.EntityManagerclose()和序列化上的实体。 (见here)。所以我假设在此操作之后每个EntityManager.getTransaction().commit()都是自动分离的。正确的吗?

我怀疑这是我问题的根本原因。我想只显式触发item。是否有可能更改设置,因此detach() / merge()不会导致EntityManager.getTransaction().commit()

1 个答案:

答案 0 :(得分:1)

只有当你关闭或清除交易而不是提交时,实体才会分离? ..

Detach

  

以下操作清除整个EntityManager   持久化上下文和分离所有托管实体对象:

     

*调用close方法,关闭EntityManager。

     

*调用clear方法,清除EntityManager   持久化上下文。

     

*回滚事务 - 通过调用   回滚或提交失败。