2014-11-27 3 views
2

Мне нужно указать режим блокировки для спящего режима. Что я делаю:Hibernate: lockMode для критериев не работает

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

Но мне нужно использовать более сложный запрос.

ответ

0

Я нашел причину, по которой это не работает. Это на самом деле ошибка в спящем режиме 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); 

 Смежные вопросы

  • Нет связанных вопросов^_^