我在以下查询中遇到了令人费解的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] ......
答案 0 :(得分:1)
你的em
可能已经加载了一个对象,当你执行typedQuery.getSingleResult()
时,你正在重新加载处于休眠缓存中的现有对象(导致上述异常)。因此,在运行键入的查询刷新之前,请清除它是否有效
em.flush();
em.clear();
//and your typed query goes here
或者,如果您知道造成的确切对象,那么您可以执行
session.evict(theExactObject)