Я использую Spring Data JPA с Hibernate как провайдер постоянства по PostgreSQL. Я пытаюсь обеспечить пессимистичные блокировки:Пессимистическая блокировка не выполняется с ObjectOptimisticLockingFailureException
public interface MediaRepository extends JpaRepository<Media, Long>, MediaRepositoryCustom {
Long countByCreatedBy(User creator);
@Query("select m from Media m where m.id = ?1")
@Lock(LockModeType.PESSIMISTIC_WRITE)
Media findOneAndLock(Long id);
}
Я пытаюсь вызвать findOneAndLock
от 2-х потоков. Я ожидаю, что если Thread A
заблокирует объект, Thread B
должен ждать, пока блокировка не будет отпущена. Но вместо этого Thread B
throws org.springframework.orm.ObjectOptimisticLockingFailureException
.
Я уверен, что оба потока выполняют выбор для обновления (2 таких записи в журнале базы данных).
он уже установлен. – skozlov
Какая ценность? И второй поток будет ждать только сконфигурированное время и НЕ бесконечно. – Rohit
10000. Опять же, я поймаю org.springframework.orm.ObjectOptimisticLockingFailureException. – skozlov