Hibernate biedt de UPGRADE_SKIPLOCKED Lock-modus.
Gebruik JPA en Hibernate om een "SKIP_LOCKED" te produceren volgens Sluimerstand LockMode documentatie, moet u de PESSIMISTIC_WRITE . combineren JPA LockModeType :
entityManager.find(Department.class, 1, LockModeType.PESSIMISTIC_WRITE);
en de instelling voor de time-outvergrendeling, zoals bijvoorbeeld in persistence.xml voor uw persistentie-eenheid:
<properties>
<property name="javax.persistence.query.timeout" value="-2"/>
</properties>
(Merk op dat u deze LockMode ook voor complexe zoekopdrachten kunt configureren)
SKIP LOCKED maakt geen deel uit van ANSI SQL. Sommige RDBMS, zoals de volgende, bieden dit als een specifieke functie:
Met pure JPA is het dus niet mogelijk om een "SKIP LOCKED" op te geven in query's. Inderdaad, zoals gedocumenteerd in LockModeType , JPA 2.1 ondersteunt alleen het volgende:
- GEEN
- OPTIMISTISCH
- OPTIMISTIC_FORCE_INCREMENT
- PESSIMISTIC_FORCE_INCREMENT
- PESSIMISTIC_READ
- PESSIMISTIC_WRITE
- LEES
- SCHRIJVEN
Als u echter SKIP LOCKED in uw zoekopdracht wilt inschakelen, kunt u deze alternatieven gebruiken:
- Gebruik een specifieke JPA-implementatiefunctie, zoals Sluimerstand LockMode waarmee de SKIP LOCKED kan worden gespecificeerd via een JPA-query, dankzij een combinatie van PESSIMISTIC_WRITE LockModeType Lock Timeout-specifieke instelling zoals hierboven beschreven
- Maak een native SQL-query zoals u deed