Java Hibernate-查询中是否可能存在StaleObjectStateException?

Java Hibernate-查询中是否可能存在StaleObjectStateException?,java,hibernate,orm,optimistic-concurrency,staleobjectstate,Java,Hibernate,Orm,Optimistic Concurrency,Staleobjectstate,如果在第一个和第二个查询之间的不同会话中,查询的结果数据被并发更新更改,那么在一个tx内执行两次相同的查询时,是否可以使用Hibernate获取StaleObjectStateException 在这个场景中,我对所有实体使用乐观并发控制 看起来是这样的 线程1:事务开始 线程1:执行并检索查询,即键为4711的订单 线程2:在第二个线程中检索、更改和提交与键4711相同的顺序 线程1:再次执行查询,并应返回键为4711的订单 在第二次查询中,我会在线程1中得到一个StaleObjectStat

如果在第一个和第二个查询之间的不同会话中,查询的结果数据被并发更新更改,那么在一个tx内执行两次相同的查询时,是否可以使用Hibernate获取
StaleObjectStateException

在这个场景中,我对所有实体使用乐观并发控制

看起来是这样的

线程1:事务开始
线程1:执行并检索查询,即键为4711的订单
线程2:在第二个线程中检索、更改和提交与键4711相同的顺序
线程1:再次执行查询,并应返回键为4711的订单

在第二次查询中,我会在线程1中得到一个
StaleObjectStateException

谢谢你的帮助


托马斯

我不这么认为。Thread-1中的第二个查询甚至没有命中数据库,您将从一级缓存(会话)中获取(过时)对象。但是,如果在第二次查询后更改顺序,则刷新会话时会出现异常。

免责声明:我没有尝试过,这是我对hibernate的了解

执行第二个查询或提交线程1中的事务时,您将不会得到一个
StaleObjectStateException


但是,如果在执行第二个查询之前修改了
订单
,则
订单
将在执行第二个查询之前刷新(假设为自动刷新模式和读写事务),这将触发
StaleObjectStateException

,谢谢您的回答。在此期间,我编写了一个测试,它准确地显示了您所描述的内容。如果线程1在执行第二个查询之前以某种方式更改了顺序,那么由于自动刷新,我将获得StaleObjectException。这实际上发生在最近的一个项目中,一开始看起来很奇怪,因为订单的更改是由于一个副作用。