如果两个用户想要持久保存相同的Object,则抛出异常。什么是最好的方法?

时间:2015-05-28 12:23:38

标签: java hibernate jpa

我有一个使用Hibernate进行持久化的JSF应用程序。现在如何解决以下问题:

用户A打开配置页面并编辑某些对象,但保持打开状态并稍后保存。用户B打开相同对象的配置,快速编辑并按保存。因此,他认为用户A现在处于腐败状态。

我只是希望用户A收到一条消息,说明他在尝试保存后必须刷新视图。

如何识别这种腐败状态?在我的数据库(oracle)中,我有一个对象的version_id,就像对象的版本计数器一样。一种可能性是通过加载编辑视图来保存versionId,然后在保存之前进行比较。但是我需要一个更通用的方法,这对我的所有观点来说都是太多的工作。

1 个答案:

答案 0 :(得分:0)

用户A和用户B正在更新不重叠的对象图的一部分。因此,Hibernate的乐观并发控制无法帮助检测到这一点,因为从Hibernate的角度来看,没有数据冲突,也没有丢失更新。

由于您的业务逻辑规定整个对象图现在已过时。解决此问题的一种方法是将对象图的根节点标记为每当对象图的一部分发生更改时手动修改,这样Hibernate就可以抛出Stale对象状态异常。

进行手动版本更新的一种方法如下: Updating hibernate version manually