使用hibernate session.load锁定对象

时间:2014-10-10 07:30:41

标签: java oracle hibernate locking

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)
  1. 如果其他一些帖子也发出上述声明1,那是什么 会发生什么事吗?那个线程会阻塞吗?或者它会得到 某种异常?像CannotAcquireLock异常之类的东西?一世 想了解1,2,3的行为。
  2. 如果一个线程获得一个锁,然后死了会发生什么?是吗? 锁自动释放?还是记录永远锁定?

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

1 个答案:

答案 0 :(得分:1)

锁定绑定到事务。一旦提交或回滚事务,它就会被释放。如果你的线程死了并使你的交易保持悬空,那么锁定仍然存在。

尝试获取锁定的其他线程只会等待。

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