sql >> Base de Datos >  >> RDS >> PostgreSQL

Spring Data JPA + Hibernate Saltar filas bloqueadas (PostgreSQL)

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 :
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
    
    Después de esto, recibí el resultado deseado:
    where
        subscripti0_.valid_until<=? 
    and subscripti0_.status='ACTIVE' 
    for update of subscripti0_1_ skip locked
    
    y obviamente, el subproceso concurrente no pudo obtener filas bloqueadas hasta que se completó la transacción.
  • usar consulta nativa:
    SELECT * FROM objects o WHERE o.valid_until <= :validUntil FOR UPDATE SKIP LOCKED