Hibernacja zapewnia tryb blokady UPGRADE_SKIPLOCKED.
Korzystanie z JPA i Hibernate, aby utworzyć „SKIP_LOCKED” zgodnie z Hibernacja trybu blokady dokumentacji, musisz połączyć PESSIMISTIC_WRITE WZP LockModeType :
entityManager.find(Department.class, 1, LockModeType.PESSIMISTIC_WRITE);
i ustawienie limitu czasu blokady, jak na przykład w persistence.xml dla twojej jednostki trwałości:
<properties>
<property name="javax.persistence.query.timeout" value="-2"/>
</properties>
(Pamiętaj, że możesz skonfigurować ten tryb blokady również dla złożonych zapytań)
SKIP LOCKED nie jest częścią ANSI SQL. Niektóre RDBMS, takie jak następujące, zapewniają to jako specyficzną funkcję:
Tak więc w przypadku czystego JPA nie jest możliwe określenie „POMIŃ ZABLOKOWANY” w zapytaniach. Rzeczywiście, jak udokumentowano w LockModeType , JPA 2.1 obsługuje tylko następujące elementy:
- BRAK
- OPTYMISTYCZNY
- OPTIMISTIC_FORCE_INCREMENT
- PESSIMISTIC_FORCE_INCREMENT
- PESSIMISTIC_READ
- PESSIMISTIC_WRITE
- CZYTAJ
- PISAĆ
Aby jednak włączyć SKIP LOCKED w zapytaniu, możesz użyć następujących alternatyw:
- Użyj określonej funkcji implementacji JPA, takiej jak Hibernuj tryb blokady co pozwala określić SKIP LOCKED za pomocą zapytania JPA, dzięki kombinacji PESSIMISTIC_WRITE LockModeType Określone ustawienie limitu czasu blokady, jak opisano powyżej
- Utwórz natywne zapytanie SQL tak, jak to zrobiłeś