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