2

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

在这种情况下,我对所有实体使用乐观并发控制。

所以它看起来像这样。

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

我会StaleObjectStateException在第二个查询中获得 Thread-1 吗?

谢谢你的帮助!

托马斯

4

2 回答 2

1

Disclaimer: I have not tried it, this is what is expect from what I know of hibernate.

You will not get a StaleObjectStateException when executing the second query nor when the transaction from thread-1 is commited.

However, if if the order was modified before the second query is executed, the order will get flushed (assuming auto-flush mode and read-write transaction) right before the second query gets executed and this will trigger a StaleObjectStateException.

于 2010-03-11T03:19:18.407 回答
0

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

于 2010-02-27T16:52:39.473 回答