选择查询中的OptimisticLockException

时间:2014-03-05 11:17:55

标签: java hibernate java-ee jpa

在选择查询中获得了一个OptimisticLockException

  

javax.persistence.OptimisticLockException at   org.hibernate.ejb.AbstractEntityManagerImpl.wrapStaleStateException(AbstractEntityManagerImpl.java:1415)   [hibernate3.jar:3.6.10.Final] at   org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1336)   [hibernate3.jar:3.6.10.Final] at   org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1317)   [hibernate3.jar:3.6.10.Final] at   org.hibernate.ejb.QueryImpl。的 getResultList (QueryImpl.java:255)   [hibernate.jar文件:3.6.10.Final]

查询是一个简单的选择查询,涉及多个实体和where子句,如

  

从table1 a,table2 b,table3中选择不同的a.id,b.type ....   c ...其中b.id = a和c.id in ...

众所周知,当我们尝试更新脏实体时会发生OptimisticLockException,但是select查询如何导致此异常。是否存在任何可能性或者这是一个错误?

1 个答案:

答案 0 :(得分:2)

最有可能的选择查询不是异常的来源,而只是触发器。 通常,Hibernate将在相关选择之前触发刷新,因此如果您进行更新导致OptimisticLockException,则在刷新更新时将抛出异常。

在执行select查询之前尝试手动刷新,你应该在那里看到异常(你可能必须将刷新模式设置为MANUAL)。