hibernate - hibernate stalestateException 的最佳更新策略

标签 hibernate version state

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

这很好用,如果用户试图保存一个过时的对象,我们会得到一个 stalestateexception。
在我们的例子中,我们希望给用户一个通知屏幕来放弃他的更改或覆盖数据库中的当前值。

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

最佳答案

我认为 Hibernate 不会试图帮助您解决这个问题,因为这方面的需求可能非常复杂和定制。

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

此外,如果您简单地在后端合并同一实体的两个版本并保留它,您也可能有 UI 级别验证链接可能被违反的字段。

关于hibernate - hibernate stalestateException 的最佳更新策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8832101/

相关文章:

powershell - 如何通过 Invoke-Command 在远程计算机上调用 Powershell 版本 2

scala - 如何找到项目的 Play Framework 版本?

java - JPA - 如何在查询多对多关系时防止不必要的连接

mysql - 如何将值传递给hibernate的sqlRestriction?

java - 在 Hibernate HQL 中,当多个子类具有同名属性时,如何左连接获取子类的链接实体?

javascript - 当其他组件的状态发生变化时如何获取

javascript - 将状态从 ajax 从一个组件传递到另一个组件

java - 二级缓存 + Spring Boot + Java Hibernate 中的问题

android - 最新构建工具 : What To Use? (Android)

button - SwiftUI:如何从 View 模型更新按钮状态