PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Spring Data JPA + Ibernazione Salta righe bloccate (PostgreSQL)

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 :
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
    
    Dopo questo ho ricevuto l'output desiderato:
    where
        subscripti0_.valid_until<=? 
    and subscripti0_.status='ACTIVE' 
    for update of subscripti0_1_ skip locked
    
    e ovviamente, il thread simultaneo non è stato in grado di recuperare le righe bloccate fino al completamento della transazione.
  • usa query nativa :
    SELECT * FROM objects o WHERE o.valid_until <= :validUntil FOR UPDATE SKIP LOCKED