悲观写锁定在 Hibernate 中不起作用
Pessimistic Write Locking not working in Hibernate
我是休眠新手。
我有两个事务处理数据库的同一条记录
事务 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 副本,进行一些更改并保存到数据库。
a.setUpdatedCount(oldCount);
getCurrentSession().merge(a);
事务 1 最终覆盖了在事务 2 中所做的更改。
我在这两种情况下都应用了悲观锁,所以先开始的应该等待另一个完成并在提交之前读取更新的记录。但这似乎并没有发生。我做错了什么?
提前感谢您的宝贵时间。
对于遇到相同问题的任何人,帮助我的是对条件对象而不是实体进行更改。
query.setLockMode(LockMode.PESSIMISTIC_WRITE);
Arial a = (Arial) query.uniqueResult();
我是休眠新手。
我有两个事务处理数据库的同一条记录
事务 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 副本,进行一些更改并保存到数据库。
a.setUpdatedCount(oldCount);
getCurrentSession().merge(a);
事务 1 最终覆盖了在事务 2 中所做的更改。
我在这两种情况下都应用了悲观锁,所以先开始的应该等待另一个完成并在提交之前读取更新的记录。但这似乎并没有发生。我做错了什么?
提前感谢您的宝贵时间。
对于遇到相同问题的任何人,帮助我的是对条件对象而不是实体进行更改。
query.setLockMode(LockMode.PESSIMISTIC_WRITE);
Arial a = (Arial) query.uniqueResult();