Spring Data JPA + Hibernate Пропустить заблокированные строки (PostgreSQL) - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь выполнить запрос SKIP LOCKED на PostgreSQL, используя Spring Data JPA (2.1) и Hibernate. Запрос выглядит так:

@Lock(LockModeType.PESSIMISTIC_WRITE)
@QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value ="-2")})
List<Obj> findByEntityAndStatus(Entity entity, Status status);

Согласно Пропущен собственный запрос данных JPA, заблокированный и Выберите для обновления, заблокированный для пропуска с уровня JPA , он должен работать, но сгенерированный запрос выбирает только обновление, не пропуская заблокированные строки.

Сгенерированный запрос:

Hibernate: выберите obj0_.id в качестве id1_5_, obj0_.name в качестве имени6_5_, obj0_.entity_id в качестве entity10_5_, obj0_.status в качестве status8_5_ из objs obj0_ левого внешнего объекта entity__ на obj0_.entity_id = entity1_id.id ? и obj0_.status =? для обновления obj0_

Чего мне не хватает?

1 Ответ

0 голосов
/ 11 июня 2019

Вы можете использовать nativeQuery.

@Query(value = "SELECT * FROM task LIMIT 10 FOR UPDATE SKIP LOCKED", nativeQuery = true)
List<TaskEntity> fetchAllUnlocked();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...