Hibernate具有PESSIMISTIC锁定机制,可用于锁定数据库行。

session.lock(Object object,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语句。

07-25 21:22