【发布时间】: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