Spring Boot Transactional не соблюдает FOR UPDATEJAVA

Программисты JAVA общаются здесь
Anonymous
Spring Boot Transactional не соблюдает FOR UPDATE

Сообщение Anonymous »

У меня есть приложение SpringBoot с базой данных Postgres. Одна из конечных точек моего контроллера — это DELETE /item/{id}, а другая — GET /item/{id}.
Обе они вызывают другой метод уровня сервиса с аннотацией @Transactional. Затем метод get вызывает метод репозитория JPA по умолчанию, findById(id), тогда как метод удаления сначала получает блокировку уровня строки с помощью метода JPA:

Код: Выделить всё

@Query("SELECT * FROM item WHERE id = :id FOR UPDATE", nativeQuery= true)
Optional findByIdWithLock(Integer id);
После получения элемента с помощью этого метода он запускает 10-секундный таймер перед вызовом метода удаления по умолчанию. Таймер предназначен для проверки работы блокировки. Я также использую собственный запрос, поскольку @Lock(LockModeType.PESSIMISTIC_WRITE) генерирует обновление без ключа при использовании Postgres по какой-то причине.
Я бы ожидайте, что вызов get в течение 10 секунд будет ждать завершения удаления, однако он запускается мгновенно.
Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/790 ... for-update

Вернуться в «JAVA»