Din kode er fin. Alt du skal huske er, at PESSIMISTIC_WRITE bruger en SELECT … FOR UPDATE SKIP LOCKED
i Oracle og PostgreSQL 9.5 . Jeg antager, at du kunne have glemt at fortælle JPA, at du, hvad du skal bruge nyere version af Postgres. Så du har to muligheder:
- fortæl JPA, at du bruger PostgreSQL Dialect, som understøtter
SKIP LOCKED
:
Efter dette modtog jeg ønsket output:spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
og tydeligvis var samtidig tråd ikke i stand til at hente låste rækker, før transaktionen var gennemført.where subscripti0_.valid_until<=? and subscripti0_.status='ACTIVE' for update of subscripti0_1_ skip locked
- brug indbygget forespørgsel :
SELECT * FROM objects o WHERE o.valid_until <= :validUntil FOR UPDATE SKIP LOCKED