sql >> Databasteknik >  >> RDS >> PostgreSQL

Spring Data JPA + Hibernate Hoppa över låsta rader (PostgreSQL)

Din kod är bra. Allt du behöver komma ihåg är att PESSIMISTIC_WRITE använder en SELECT …​ FOR UPDATE SKIP LOCKED i Oracle och PostgreSQL 9.5 . Jag antar att du kunde ha glömt att berätta för JPA att du ska använda den nyare versionen av Postgres. Så du har två alternativ:

  • berätta för JPA att du använder PostgreSQL Dialect som stöder SKIP LOCKED :
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
    
    Efter detta fick jag önskad utdata:
    where
        subscripti0_.valid_until<=? 
    and subscripti0_.status='ACTIVE' 
    for update of subscripti0_1_ skip locked
    
    och uppenbarligen kunde samtidig tråd inte hämta låsta rader förrän transaktionen slutfördes.
  • använd inbyggd fråga :
    SELECT * FROM objects o WHERE o.valid_until <= :validUntil FOR UPDATE SKIP LOCKED 
    


  1. SQL UNION Cheat Sheet med 10 enkla och användbara tips

  2. Vilken är den lämpligaste datatypen för att lagra en IP-adress i SQL-servern?

  3. Java - Hur anropar man en orakelprocedur med anpassade typer?

  4. Analysera I/O-prestanda för SQL Server