选择查询中的 OptimisticLockException

vig*_*esh 0 java hibernate jpa jakarta-ee

在选择查询中出现 OptimisticLockException

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

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

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

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

Tho*_*mas 5

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

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