【发布时间】:2012-01-12 08:38:02
【问题描述】:
我们正在使用带有乐观锁定的休眠。 我们所有的实体都有@version 注解。
这很好用,如果用户试图保存一个过时的对象,我们会得到一个 stalestateexception。 在我们的例子中,我们希望给用户一个通知屏幕来放弃他的更改或覆盖数据库中的当前值。
这是陈旧状态异常的常见用例。 我的问题与这个用例有关。如果用户决定用他的更改覆盖当前数据库行,最好的策略是什么?我已经浏览了休眠参考指南和不同的网站,但所有提到的事实是您必须自己捕获 stalestateexception,然后以编程方式处理数据的覆盖。 我想知道hibernate是否有一些实用程序来简化这个策略,如果用户决定用他的数据覆盖,我可以做的最简单的事情是从数据库中检索实体的最后一个版本,然后将所有更改的字段复制到这个对象和然后将更改的对象保存回数据库。 但我不禁想知道是否没有更优雅的解决方案。
【问题讨论】: