【问题标题】:Pessimistic Write Locking not working in Hibernate悲观写锁定在 Hibernate 中不起作用
【发布时间】:2019-12-03 11:12:27
【问题描述】:

我是一个休眠的新手。

我有两个事务在 db 的同一记录上工作

事务 1:读取实体 E. 应用锁


    getCurrentSession().buildLockRequest(
                    new LockOptions(
                        LockMode.PESSIMISTIC_WRITE
                    )
                )
                .setTimeOut(
                    Session.LockRequest.PESSIMISTIC_NO_WAIT
                )
                .lock(a);

事务 2:编辑新事务中的行并将更改提交给 E

for(Arial a : arials) {
            getCurrentSession().buildLockRequest(
                    new LockOptions(
                        LockMode.PESSIMISTIC_WRITE
                    )
                )
                .setTimeOut(
                    Session.LockRequest.PESSIMISTIC_NO_WAIT
                )
                .lock(a);
a.setUpdatedCount(count);
getCurrentSession().merge(a);
        }

事务 1 :处理之前获得的 E 副本,进行一些更改并保存到 DB。

a.setUpdatedCount(oldCount);
getCurrentSession().merge(a);

事务 1 最终会覆盖事务 2 中所做的更改。

我在这两种情况下都应用了悲观锁,所以无论哪一个先启动,都应该等待另一个完成并在提交之前读取更新的记录。但这似乎不会发生。我做错了什么?

提前感谢您的宝贵时间。

【问题讨论】:

    标签: hibernate hql pessimistic-locking


    【解决方案1】:

    对于面临相同问题的任何人,帮助我的是对标准对象而不是实体进行更改。

    query.setLockMode(LockMode.PESSIMISTIC_WRITE);
            Arial a = (Arial) query.uniqueResult();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-30
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 2013-09-16
      • 1970-01-01
      • 2018-07-30
      相关资源
      最近更新 更多