Hibernate具有PESIMISTIC锁定机制,可用于锁定数据库行。
session.lock(对象对象,LockMode LockMode)。
假设我锁定了一个对象:
1)session.lock(myObject.LockMODE.READ)
2)session.lock(myObject,LockMODE.UPGRADE)
3)session.lock(myObject.LockMODE.UPGRADE_NOWAIT)
- 如果其他线程也发布了上述语句1会发生什么事吗?那个线程会阻塞吗?还是会某种例外?类似CannotAcquireLock异常?我想了解1,2,3的行为
如果一个线程获得了一个锁,然后就死了,会发生什么?是锁自动释放?还是记录永远被锁定?
session.lock(myObject,LOCKMODE.SOME_LOCK_MODE) //thread dies . (lets say JVM is killed)
锁绑定到事务。一旦事务被提交或回滚,它就会被释放。如果你的线程死了,让你的事务悬着,锁仍然有效。
其他试图获取锁的线程将简单地等待。
如果我没记错的话,对lock()的调用会产生一个select ... for update
SQL语句。