Din kod är bra. Allt du behöver komma ihåg är att PESSIMISTIC_WRITE använder en SELECT … FOR UPDATE SKIP LOCKED
i Oracle och PostgreSQL 9.5 . Jag antar att du kunde ha glömt att berätta för JPA att du ska använda den nyare versionen av Postgres. Så du har två alternativ:
- berätta för JPA att du använder PostgreSQL Dialect som stöder
SKIP LOCKED
:
Efter detta fick jag önskad utdata:spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
och uppenbarligen kunde samtidig tråd inte hämta låsta rader förrän transaktionen slutfördes.where subscripti0_.valid_until<=? and subscripti0_.status='ACTIVE' for update of subscripti0_1_ skip locked
- använd inbyggd fråga :
SELECT * FROM objects o WHERE o.valid_until <= :validUntil FOR UPDATE SKIP LOCKED