Hibernate ger UPGRADE_SKIPLOCKED låsläge.
Använd JPA och Hibernate för att skapa en "SKIP_LOCKED" enligt Hibernate LockMode dokumentation måste du kombinera PESSIMISTIC_WRITE JPA LockModeType :
entityManager.find(Department.class, 1, LockModeType.PESSIMISTIC_WRITE);
och inställningen Lock timeout, som till exempel i persistence.xml för din persistensenhet:
<properties>
<property name="javax.persistence.query.timeout" value="-2"/>
</properties>
(Observera att du kan konfigurera detta LockMode för komplexa frågor också)
SKIP LOCKED är inte en del av ANSI SQL. Vissa RDBMS såsom följande tillhandahåller detta som en specifik funktion:
Så med ren JPA är det inte möjligt att ange ett "SKIP LOCKED" i frågor. Faktiskt, som dokumenterats i LockModeType , JPA 2.1 stöder endast följande:
- INGEN
- OPTIMISTISK
- OPTIMISTIC_FORCE_INCREMENT
- PESSIMISTIC_FORCE_INCREMENT
- PESSIMISTIC_READ
- PESSIMISTIC_WRITE
- LÄS
- SKRIV
Men för att aktivera SKIP LOCKED i din fråga kan du använda dessa alternativ:
- Använd specifik JPA-implementeringsfunktion, som Hibernate LockMode som gör det möjligt att specificera SKIP LOCKED via en JPA-fråga, tack vare en kombination av PESSIMISTIC_WRITE LockModeType Lock Timeout-specifik inställning enligt beskrivningen ovan
- Skapa en inbyggd SQL-fråga som du gjorde