1

我有两个 A 类和 B 类对象(两者都映射到同一个表,并且在我的休眠配置中有一个。两个对象中的标记也引用数据库中表的主键。)。

当用户使用我的应用程序时,会在某个时间点更新对象 A。稍后更新对象 B。有时,会发生异常,我认为这是因为我正在使用这样的多个对象(下面打印的消息)

org.hibernate.StaleObjectStateException:行被另一个事务更新或删除(或未保存值映射不正确):

我是否需要覆盖这些对象的 equals 方法(如本问题所述?)

4

2 回答 2

2

当版本检查(乐观锁)失败时,通常会抛出 StaleObjectStateException。这在并发环境中是很常见的事情。您可能需要适当的逻辑来处理此异常,例如向失败事务的用户提供一些有用的消息,例如“嗨,您打算更新的数据刚刚被另一个用户更新”或“您正在尝试更新过期数据“胡说八道。总而言之,我认为您不需要对映射做任何事情。

于 2013-02-01T06:44:45.153 回答
0

可能是旧事务未提交,flush() 也很有用,因为无法保证会话何时执行 JDBC 调用,只能保证它们的执行顺序 - 除非您使用 flush()。

于 2013-02-01T06:56:54.507 回答