3

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

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

我怎样才能强制休眠做出SELECT FOR UPDATE子句?我看到的唯一情况是:

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

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

4

1 回答 1

1

我找到了它不起作用的原因。它实际上是休眠 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);
于 2014-12-03T09:33:25.407 回答