Seu código está bom. Tudo que você precisa lembrar é que PESSIMISTIC_WRITE usa um
SELECT … FOR UPDATE SKIP LOCKED
em Oracle e PostgreSQL 9.5 . Eu suponho que você poderia ter esquecido de dizer ao JPA, que você deve usar a versão mais recente do Postgres. Então você tem duas opções:- informe ao JPA que você está usando o dialeto PostgreSQL que suporta
SKIP LOCKED
:
Depois disso, recebi a saída desejada:spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
e, obviamente, o encadeamento simultâneo não foi capaz de buscar linhas bloqueadas até que a transação fosse concluída.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