【问题标题】:Optimistic locking on merge operation using JPA使用 JPA 对合并操作进行乐观锁定
【发布时间】:2015-06-10 22:25:22
【问题描述】:

过去 2 年我一直在运行生产代码。现在我们注意到更新操作存在并发问题。我正在使用 JPA 作为我的 ORM。在更新请求中,我正在使用

this.entityManager.merge(entity);

现在我们想使用乐观锁来避免这种并发。我在谷歌做了一些搜索。我认为以下会照顾好

this.entityManager.lock(entity, LockModeType.OPTIMISTIC);

我的疑问是我们真的需要在表格中使用@Version。我想我的客户现在不会同意添加这个专栏。

谁能告诉我有没有更好的方法来处理这种情况。

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    嗯,在 JPA 中,没有。 JPA 使用版本列来保持它的一致性,并且似乎没有任何解决办法。

    在 Hibernate 中有一些语义可以解决这个问题:

    Optimistic-lock = ‘all’
    

    当您将 Hibernate 映射文件中元素的乐观锁定属性设置为值“all”时,您是在告诉 Hibernate 检查关联行中的列在检索到持久对象后和更新之前是否发生更改数据库中的行。

    阅读更多:http://www.intertech.com/Blog/hibernate-optimistic-lock-without-"

    【讨论】:

    • 我已经放弃了锁定计划,而是要求用户通过 Lastupdated 日期并检查 DB。如果两者都匹配,我将允许更新否则错误消息。谢谢你的时间。
    猜你喜欢
    • 2016-09-23
    • 2021-09-27
    • 1970-01-01
    • 2014-07-02
    • 2012-11-14
    • 1970-01-01
    • 2019-12-30
    • 2011-05-31
    • 1970-01-01
    相关资源
    最近更新 更多