sql >> Base de Datos >  >> RDS >> Oracle

Seleccione para actualizar omitir bloqueado desde el nivel JPA

Hibernate proporciona el modo de bloqueo UPGRADE_SKIPLOCKED.

Usando JPA e Hibernate, para producir un "SKIP_LOCKED" según Modo de bloqueo de hibernación documentación, debe combinar el PESSIMISTIC_WRITE JPA LockModeType :

entityManager.find(Department.class, 1, LockModeType.PESSIMISTIC_WRITE);

y la configuración de tiempo de espera de bloqueo, como por ejemplo en persistence.xml para su unidad de persistencia:

<properties>
   <property name="javax.persistence.query.timeout" value="-2"/>
</properties>

(Tenga en cuenta que también puede configurar este LockMode para consultas complejas)

SKIP LOCKED no es parte de ANSI SQL. Algunos RDBMS como los siguientes proporcionan esto como una función específica:

Entonces, con JPA puro, no es posible especificar un "SALTO BLOQUEADO" en las consultas. De hecho, como se documenta en LockModeType , JPA 2.1 solo admite lo siguiente:

  • NINGUNO
  • OPTIMISTA
  • AUMENTO_DE_FUERZA_OPTIMISTICA
  • INCREMENTO_FUERZA_PESSIMISTICA
  • PESIMISTIC_READ
  • ESCRITURA_PESIMISTICA
  • LEER
  • ESCRIBE

Sin embargo, para habilitar SKIP LOCKED en tu consulta puedes usar estas alternativas:

  • Utilice una función de implementación de JPA específica, como Modo de bloqueo de hibernación que permite especificar el SKIP LOCKED a través de una consulta JPA, gracias a una combinación de PESSIMISTIC_WRITE Configuración específica del tiempo de espera de bloqueo de LockModeType como se describe anteriormente
  • Cree una consulta SQL nativa como lo hizo