Как указать пессимистическую блокировку с Критериями API?

Я получаю список объектов в, в спящем режиме с помощью Критериев API. Однако я должен соединить те объекты, поскольку другой поток, выполняющийся одновременно, получит точные объекты, и только один из потока преуспеет в отсутствии пессимистической блокировки.

Я попробовал как ниже, но это не работает.

List esns = session
    .createCriteria(Reddy_Pool.class)
    .add(Restrictions.eq("status", "AVAILABLE"))
    .add(Restrictions.eq("name", "REDDY2"))
    .addOrder(Order.asc("id"))
    .setMaxResults(n)
    .setLockMode(LockMode.PESSIMISTIC_WRITE) //not working at all
    .list();

Обновление: Я выполняю обновление после этого оператора, так, чтобы я хотел бы, чтобы оба потока считали различные строки, или по крайней мере второй поток должен ожидать, пока первый поток не завершается с транзакцией и оставляет блокировку.

И быть в спящем режиме сгенерированного запроса ниже.

Hibernate: select this_.id as id1_0_, this_.name as name1_0_, 
this_.orderitem_id as orderitem3_1_0_, this_.status as status1_0_, 
this_.store as store1_0_, this_.vendor as vendor1_0_, this_.version as version1_0_ 
from reddy_pool this_ 
where this_.status=? and and this_.name=? order by this_.id asc limit ?

Обновление: Это кажется ошибкой в 3.5.2 версиях как Pascal Thivent (Большое спасибо Pascal) упомянутый, я присоединился как участник и наблюдение проблемы. Надо надеяться, это будет включено в следующий выпуск.

Однако я пытался использовать другой подход здесь с session.buildLockRequest()... но я не мог вполне выяснить, как использовать его, и использующий ниже кода не имеет никакого эффекта вообще.

for (int i=0; i < n; i++)
    session.buildLockRequest(LockOptions.UPGRADE).lock(esns.get(i));
9
задан Mikko Maunu 9 July 2017 в 06:45
поделиться

1 ответ

Какую версию Hibernate вы используете? Может ли это быть HHH-5275 ? Вы уверены, что оператор FOR UPDATE не создается? Можете ли вы показать сгенерированный SQL?

4
ответ дан 3 November 2019 в 07:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: