gpt4 book ai didi

hibernate - 如果没有更新完成,LockMode.WRITE是否释放锁

转载 作者:行者123 更新时间:2023-12-04 21:50:45 24 4
gpt4 key购买 nike

hibernate 3.2.6甲骨文11.x

我正在查看的代码使用此行锁定表行以进行更新:

Query query = createQuery("from MyTable t where t.col1 = :param1");
query.setParameter("param1", "blah");
query.setLockMode("s", LockMode.WRITE);
return (SysType) query.uniqueResult();

代码随后执行以下操作:

getSession().saveOrUpdate(sysType);
getSession().flush();

其中 getSession() 返回 Hibernate session 。

我的问题是 - 锁什么时候被释放?如果 sysType 对象自读取后尚未更新,则 saveOrUpdate 是否会调用 DB 并释放锁吗?

我正在查看我的应用程序的一个问题,我怀疑它是由该行被锁定并且锁未释放从而阻止其他读取引起的。

最佳答案

悲观锁在事务结束时释放,无论对象是否更新。这就是数据库的工作方式;它与 Hibernate 无关。

但是,请勿使用 LockMode.WRITE :

WRITE lock is obtained when an object is updated or inserted. This lock mode is for internal use only and is not a valid mode for load() or lock() (both of which throw exceptions if WRITE is specified).

使用LockMode.PESSIMISTIC_WRITE相反,如果您需要悲观锁(选择更新构造)。

关于hibernate - 如果没有更新完成,LockMode.WRITE是否释放锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33216153/

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