gpt4 book ai didi

java - 使用 hiberante session.load 锁定对象

转载 作者:行者123 更新时间:2023-11-30 03:43:31 25 4
gpt4 key购买 nike

Hibernate 有悲观锁定机制,可用于锁定数据库行。

session.lock(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)

最佳答案

锁与事务绑定(bind)。一旦事务提交或回滚,它就会被释放。如果您的线程终止并让您的事务悬空,锁仍然保留。

尝试获取锁的其他线程将只是等待。

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

关于java - 使用 hiberante session.load 锁定对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26294118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com