PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Spring Data JPA + Hibernate Ignorar linhas bloqueadas (PostgreSQL)


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 :
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
    
    Depois disso, recebi a saída desejada:
    where
        subscripti0_.valid_until<=? 
    and subscripti0_.status='ACTIVE' 
    for update of subscripti0_1_ skip locked
    
    e, obviamente, o encadeamento simultâneo não foi capaz de buscar linhas bloqueadas até que a transação fosse concluída.
  • usar consulta nativa :
    SELECT * FROM objects o WHERE o.valid_until <= :validUntil FOR UPDATE SKIP LOCKED