我有两个类A和B的对象(两者都映射到同一个表并且在我的hibernate配置中。两个对象中的标记也引用数据库中表的主键。)。
当用户使用我的应用程序时,会在某个时间点更新对象A.稍后在对象B上更新。有时会发生异常,我认为是因为我正在使用像这样的多个对象(下面打印的消息)
org.hibernate.StaleObjectStateException:行被另一个事务更新或删除(或未保存的值映射不正确):
我是否需要覆盖这些对象的equals方法(如explained in this question?)
答案 0 :(得分:2)
当版本检查(乐观锁定)失败时,通常会抛出StaleObjectStateException。 在并发环境中这是很常见的事情。您可能需要适当的逻辑来处理此异常,例如为失败事务的用户提供一些有用的消息,例如"嗨,您打算更新的数据刚刚被另一个用户更新了#34;或者"您正在尝试更新过时数据" blablabla。 总而言之,我认为你不需要对绘图做任何事情。
答案 1 :(得分:0)
可能是旧事务没有提交,flush()也很有用,因为无法保证会话何时执行JDBC调用,只能执行它们的执行顺序 - 除了你使用flush()。 / p>