Je code is in orde. Het enige dat u hoeft te onthouden, is dat PESSIMISTIC_WRITE een SELECT … FOR UPDATE SKIP LOCKED
in Oracle en PostgreSQL 9.5 . Ik neem aan dat je zou kunnen vergeten om JPA te vertellen dat je een nieuwere versie van Postgres moet gebruiken. Je hebt dus twee opties:
- vertel JPA dat u PostgreSQL Dialect gebruikt dat
SKIP LOCKED
ondersteunt :
Hierna ontving ik de gewenste output:spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
en het is duidelijk dat de gelijktijdige thread geen vergrendelde rijen kon ophalen totdat de transactie was voltooid.where subscripti0_.valid_until<=? and subscripti0_.status='ACTIVE' for update of subscripti0_1_ skip locked
- gebruik native query :
SELECT * FROM objects o WHERE o.valid_until <= :validUntil FOR UPDATE SKIP LOCKED