Hibernate 3.2.6 Oracle 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会话。
我的问题是-锁什么时候释放?如果sysType对象在读取后还没有更新,那么DB是否会被saveOrUpdate调用并释放锁呢?
我正在查看我的应用程序中的一个问题,我怀疑它是由行被锁定和锁没有释放而导致的,从而阻止了其他读取。
发布于 2015-10-19 14:12:18
悲观锁将在事务结束时释放,而不管对象是否被更新。这是数据库的工作方式;它与Hibernate无关。
但是,不要使用LockMode.WRITE
在更新或插入对象时获得写锁。此锁模式仅供内部使用,对于load()或lock()不是有效模式(如果指定写,则两者都抛出异常)。
如果需要悲观锁( LockMode.PESSIMISTIC_WRITE构造),则使用select for update。
https://stackoverflow.com/questions/33216153
复制相似问题