Tu código está bien. Todo lo que necesita recordar es que PESSIMISTIC_WRITE usa un SELECT … FOR UPDATE SKIP LOCKED
en Oracle y PostgreSQL 9.5 . Supongo que podría haberse olvidado de decirle a JPA, que debe usar una versión más nueva de Postgres. Así que tienes dos opciones:
- dile a JPA que estás usando PostgreSQL Dialect que admite
SKIP LOCKED
:
Después de esto, recibí el resultado deseado:spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
y obviamente, el subproceso concurrente no pudo obtener filas bloqueadas hasta que se completó la transacción.where subscripti0_.valid_until<=? and subscripti0_.status='ACTIVE' for update of subscripti0_1_ skip locked
- usar consulta nativa:
SELECT * FROM objects o WHERE o.valid_until <= :validUntil FOR UPDATE SKIP LOCKED