Hibernate 休眠:条件的锁定模式不工作

Hibernate 休眠:条件的锁定模式不工作,hibernate,optimistic-locking,pessimistic-locking,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指定锁定模式。 我在做什么:

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);

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

我已经找到了它不起作用的原因。它实际上是hibernate 3.5-3.6中的bug 它只在4.0.1中被修复

因此,我以以下解决方法结束:

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