我需要为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);
但我需要使用更复杂的查询。
答案 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);