使用hibante session.load锁定对象



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. 如果其他线程也发布了上述语句1会发生什么事吗?那个线程会阻塞吗?还是会某种例外?类似CannotAcquireLock异常?我想了解1,2,3的行为
  2. 如果一个线程获得了一个锁,然后就死了,会发生什么?是锁自动释放?还是记录永远被锁定?

      session.lock(myObject,LOCKMODE.SOME_LOCK_MODE)
      //thread dies . (lets say JVM is killed)
    

锁绑定到事务。一旦事务被提交或回滚,它就会被释放。如果你的线程死了,让你的事务悬着,锁仍然有效。

其他试图获取锁的线程将简单地等待。

如果我没记错的话,对lock()的调用会产生一个select ... for updateSQL语句。

最新更新