Hibernate:标准的lockMode不起作用

时间:2014-11-27 10:14:23

标签: hibernate optimistic-locking pessimistic-locking

我需要为hibernate指定锁定模式。 我在做什么:

session().createCriteria(clazz, "c")
  .add(Restrictions.eq("c.a", false))
  .add(Subqueries.propertyEq("c.b", subquery))
  .setLockMode("pos", LockMode.PESSIMISTIC_READ);

但是当我看到提供的查询时 - hibernate仍然没有提供SELECT FOR UPDATE

如何强制hibernate制作SELECT FOR UPDATE子句? 我只看到有效的情况是这样的:

session().get(clazz, id, LockOptions.UPGRADE);

但我需要使用更复杂的查询。

1 个答案:

答案 0 :(得分:0)

我找到了它没有工作的原因。它实际上是hibernate 3.5-3.6中的错误 并且它仅在4.0.1中修复。

https://hibernate.atlassian.net/browse/HHH-5275

所以,我已经以这种解决方法结束了:

MyObject myObject = criteria.uniqueResult();
MyObject lockedOne = (MyObject) session()
                       .get(MyObject.class, myObject.getId(), LockMode.UPGRADE_NOWAT);