3

休止状態のロック モードを指定する必要があります。私がやっていること:

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

しかし、提供されたクエリを見ると、休止状態はまだ提供されていませんSELECT FOR UPDATE

SELECT FOR UPDATE休止状態に節を作成させるにはどうすればよいですか? それが機能する場合のみ、次のように表示されます。

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

しかし、もっと複雑なクエリを使用する必要があります。

4

1 に答える 1

1

うまくいかない原因がわかりました。これは実際には 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);
于 2014-12-03T09:33:25.407 に答える