我在代码中收到了以下错误消息,因为我从不手动调用 $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.EntityManager
,close()
和序列化上的实体。
(见here)。所以我假设在此操作之后每个EntityManager.getTransaction().commit()
都是自动分离的。正确的吗?
我怀疑这是我问题的根本原因。我想只显式触发item
。是否有可能更改设置,因此detach() / merge()
不会导致EntityManager.getTransaction().commit()
?
答案 0 :(得分:1)
只有当你关闭或清除交易而不是提交时,实体才会分离? ..
以下操作清除整个EntityManager 持久化上下文和分离所有托管实体对象:
*调用close方法,关闭EntityManager。
*调用clear方法,清除EntityManager 持久化上下文。
*回滚事务 - 通过调用 回滚或提交失败。