首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果没有更新,LockMode.WRITE是否释放锁?

如果没有更新,LockMode.WRITE是否释放锁?
EN

Stack Overflow用户
提问于 2015-10-19 13:47:33
回答 1查看 1.9K关注 0票数 2

Hibernate 3.2.6 Oracle 11.x

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

代码语言:javascript
复制
Query query = createQuery("from MyTable t where t.col1 = :param1");
            query.setParameter("param1", "blah");
            query.setLockMode("s", LockMode.WRITE);
            return (SysType) query.uniqueResult();

守则随后这样做:

代码语言:javascript
复制
getSession().saveOrUpdate(sysType);
getSession().flush();

其中getSession()返回Hibernate会话。

我的问题是-锁什么时候释放?如果sysType对象在读取后还没有更新,那么DB是否会被saveOrUpdate调用并释放锁呢?

我正在查看我的应用程序中的一个问题,我怀疑它是由行被锁定和锁没有释放而导致的,从而阻止了其他读取。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-19 14:12:18

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

但是,不要使用LockMode.WRITE

在更新或插入对象时获得写锁。此锁模式仅供内部使用,对于load()或lock()不是有效模式(如果指定写,则两者都抛出异常)。

如果需要悲观锁( LockMode.PESSIMISTIC_WRITE构造),则使用select for update

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33216153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档