Вашият код е добре. Всичко, което трябва да запомните е, че PESSIMISTIC_WRITE използва SELECT … FOR UPDATE SKIP LOCKED
в Oracle и PostgreSQL 9.5 . Предполагам, че бихте могли да забравите да кажете на JPA, че какво да използвате по-новата версия на Postgres. Така че имате две възможности:
- кажете на JPA, че използвате PostgreSQL Dialect, който поддържа
SKIP LOCKED
:
След това получих желания изход:spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
и очевидно, едновременната нишка не беше в състояние да извлече заключени редове, докато транзакцията не бъде завършена.where subscripti0_.valid_until<=? and subscripti0_.status='ACTIVE' for update of subscripti0_1_ skip locked
- използвайте собствена заявка :
SELECT * FROM objects o WHERE o.valid_until <= :validUntil FOR UPDATE SKIP LOCKED