Hibernate具有PESSIMISTIC锁定机制,可用于锁定db行。
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)
如果一个线程获得一个锁,然后死了会发生什么?是吗? 锁自动释放?还是记录永远锁定?
session.lock(myObject,LOCKMODE.SOME_LOCK_MODE)
//thread dies . (lets say JVM is killed)
答案 0 :(得分:1)
锁定绑定到事务。一旦提交或回滚事务,它就会被释放。如果你的线程死了并使你的交易保持悬空,那么锁定仍然存在。
尝试获取锁定的其他线程只会等待。
如果我没记错的话,对lock()的调用会产生select ... for update
SQL语句。