Il tuo codice va bene. Tutto quello che devi ricordare è che PESSIMISTIC_WRITE usa un SELECT … FOR UPDATE SKIP LOCKED
in Oracle e PostgreSQL 9.5 . Presumo che avresti potuto dimenticarti di dire a JPA che cosa usare la versione più recente di Postgres. Quindi hai due opzioni:
- di' a JPA che stai usando PostgreSQL Dialect che supporta
SKIP LOCKED
:
Dopo questo ho ricevuto l'output desiderato:spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
e ovviamente, il thread simultaneo non è stato in grado di recuperare le righe bloccate fino al completamento della transazione.where subscripti0_.valid_until<=? and subscripti0_.status='ACTIVE' for update of subscripti0_1_ skip locked
- usa query nativa :
SELECT * FROM objects o WHERE o.valid_until <= :validUntil FOR UPDATE SKIP LOCKED