Java 选择查询中的OptimisticLockException

Java 选择查询中的OptimisticLockException,java,hibernate,jakarta-ee,jpa,Java,Hibernate,Jakarta Ee,Jpa,在选择查询中获得OptimisticLockException javax.persistence.OptimisticLockException位于 org.hibernate.ejb.AbstractEntityManagerImpl.wrapStaleStateException(AbstractEntityManagerImpl.java:1415) [hibernate3.jar:3.6.10.Final] org.hibernate.ejb.AbstractEntityManager

在选择查询中获得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]

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

选择不同的a.id、b.type。。。来自表1 a、表2 b、表3 c、 …其中b.id=a和c.id在


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

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


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

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


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

非常感谢,我也在想同样的答案,这是这种行为的唯一可能性吗?@vignesh我不完全确定,因为总有可能出现错误,但这是最可能的原因。非常感谢,我也在想同样的答案,这是这种行为的唯一可能性吗?@vignesh我不完全确定,因为总是有可能出现错误,但这是最可能的原因。