关于检索的Hibernate EntityExistsException

时间:2014-08-04 12:26:54

标签: hibernate

我在以下查询中遇到了令人费解的EntityExistsException -

TypedQuery<T> typedQuery = em.createQuery(query);
return result = typedQuery.getSingleResult(); // <-- exception thrown here

我认为这种异常通常应该在持久化时发生,而不是在检索时发生。您能否提供一些线索,在哪种情况下,在检索操作期间可能会发生EntityExistsException?谢谢。

  

javax.persistence.EntityExistsException:一个不同的对象   相同的标识符值已与会话关联:   [... @ d8e152db] at   org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1735)   〜[hibernate-entitymanager-4.3.0.Final.jar:4.3.0.Final] at   org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)   〜[hibernate-entitymanager-4.3.0.Final.jar:4.3.0.Final] at   org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:524)   〜[hibernate-entitymanager-4.3.0.Final.jar:4.3.0.Final] at   org.hibernate.jpa.criteria.compile.CriteriaQueryTypeQueryAdapter.getSingleResult(CriteriaQueryTypeQueryAdapter.java:71)   〜[hibernate-entitymanager-4.3.0.Final.jar:4.3.0.Final] ......

1 个答案:

答案 0 :(得分:1)

你的em可能已经加载了一个对象,当你执行typedQuery.getSingleResult()时,你正在重新加载处于休眠缓存中的现有对象(导致上述异常)。因此,在运行键入的查询刷新之前,请清除它是否有效

em.flush();
em.clear();

//and your typed query goes here

或者,如果您知道造成的确切对象,那么您可以执行

session.evict(theExactObject)