Hibernate предоставя режима на заключване UPGRADE_SKIPLOCKED.
Използвайки JPA и Hibernate, за създаване на „SKIP_LOCKED“ според Режим на заключване на хибернация документация, трябва да комбинирате PESSIMISTIC_WRITE JPA LockModeType :
entityManager.find(Department.class, 1, LockModeType.PESSIMISTIC_WRITE);
и настройката за изчакване за заключване, като например в persistence.xml за вашата единица за постоянство:
<properties>
<property name="javax.persistence.query.timeout" value="-2"/>
</properties>
(Имайте предвид, че можете да конфигурирате този LockMode и за сложна заявка)
SKIP LOCKED не е част от ANSI SQL. Някои RDBMS като следните предоставят това като специфична функция:
Така че с чист JPA не е възможно да се укаже „SKIP LOCKED“ в заявките. Всъщност, както е документирано в LockModeType , JPA 2.1 поддържа само следното:
- НЯМА
- ОПТИМИСТИЧЕН
- OPTIMISTIC_FORCE_INCREMENT
- PESSIMISTIC_FORCE_INCREMENT
- PESSIMISTIC_READ
- PESSIMISTIC_WRITE
- ЧЕТЕТЕ
- ПИШЕ
Въпреки това, за да активирате SKIP LOCKED във вашата заявка, можете да използвате тези алтернативи:
- Използвайте специфична функция за внедряване на JPA, като например Режим на заключване на хибернация което позволява да се посочи SKIP LOCKED чрез JPA заявка, благодарение на комбинация от PESSIMISTIC_WRITE LockModeType Lock Timeout специфична настройка, както е описано по-горе
- Създайте собствена SQL заявка, както направихте