Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Selecione para ignorar atualização bloqueada do nível JPA


O Hibernate fornece o modo de bloqueio UPGRADE_SKIPLOCKED.

Usando JPA e Hibernate, para produzir um "SKIP_LOCKED" conforme Hibernar LockMode documentação, você deve combinar o PESSIMISTIC_WRITE JPA LockModeType :
entityManager.find(Department.class, 1, LockModeType.PESSIMISTIC_WRITE);

e a configuração de tempo limite de bloqueio, como por exemplo em persistence.xml para sua unidade de persistência:
<properties>
   <property name="javax.persistence.query.timeout" value="-2"/>
</properties>

(Observe que você também pode configurar este LockMode para consultas complexas)

SKIP LOCKED não faz parte do ANSI SQL. Alguns RDBMS, como os seguintes, fornecem isso como um recurso específico:

Portanto, com JPA puro, não é possível especificar um "SKIP LOCKED" nas consultas. De fato, conforme documentado em LockModeType , o JPA 2.1 suporta apenas o seguinte:
  • NENHUM
  • OTIMISTA
  • OPTIMISTIC_FORCE_INCREMENT
  • PESSIMISTIC_FORCE_INCREMENT
  • PESSIMISTIC_READ
  • PESSIMISTIC_WRITE
  • LEIA
  • ESCREVA

No entanto, para habilitar SKIP LOCKED em sua consulta, você pode usar estas alternativas:
  • Use um recurso específico de implementação de JPA, como Hibernar LockMode que permite especificar o SKIP LOCKED através de uma consulta JPA, graças a uma combinação de PESSIMISTIC_WRITE Configuração específica do LockModeType Lock Timeout conforme descrito acima
  • Crie uma consulta SQL nativa como você fez