关于hibernate stalestateException的最佳更新策略

Pet*_*man 6 state hibernate version

我们正在使用带有乐观锁定的hibernate.我们所有的实体都有@version注释.

这很好,如果用户试图保存一个陈旧的对象,我们会得到一个stalestateexception.在我们的例子中,我们希望为用户提供一个通知屏幕,以丢弃他的更改或覆盖数据库中的当前值.

这是陈旧状态异常的常见用例.我的问题与此用例有关.如果用户决定用他的更改覆盖当前数据库行,那么最佳策略是什么?我已经浏览了hibernate参考指南和不同的网站,但所有提到的事实是你必须自己捕获stalestateexception然后programmaticaly处理数据的覆盖.我想知道hibernate是否有一些实用程序来简化这个策略,如果用户决定用他的数据覆盖从数据库中检索实体的最后一个版本然后将所有更改的字段复制到此对象,我可以忍受的最简单的事情然后将更改的对象保存回数据库.但我不禁想知道是否有更优雅的解决方案.

Ale*_*nes 2

我认为 Hibernate 不会尝试帮助您解决此问题,因为该领域的要求可能非常复杂且定制。

我猜测,如果一个用户要保存一个已被另一个用户同时更改的对象,您很可能不想简单地加载该对象并复制所有更改的字段并撤消所有其他用户的更改。如果两个用户更改同一字段会发生什么?您可能希望向用户展示这两个版本,并要求他们决定哪个版本是正确的。有点像合并版本控制系统中的更改。

此外,您可能还具有 UI 级别验证,该验证链接了如果您只是在后端合并同一实体的两个版本并保留它,则可能会违反这些字段。