Hibernate poskytuje režim uzamčení UPGRADE_SKIPLOCKED.
Použití JPA a Hibernate k vytvoření „SKIP_LOCKED“ podle Hibernate LockMode dokumentaci, musíte zkombinovat PESSIMISTIC_WRITE JPA LockModeType :
entityManager.find(Department.class, 1, LockModeType.PESSIMISTIC_WRITE);
a nastavení časového limitu zámku, jako například v persistence.xml pro vaši jednotku perzistence:
<properties>
<property name="javax.persistence.query.timeout" value="-2"/>
</properties>
(Všimněte si, že tento LockMode můžete nakonfigurovat i pro složité dotazy)
SKIP LOCKED není součástí ANSI SQL. Některé RDBMS, jako jsou následující, to poskytují jako specifickou funkci:
Takže s čistým JPA není možné v dotazech zadat "SKIP LOCKED". Jak je zdokumentováno v LockModeType , JPA 2.1 podporuje pouze následující:
- ŽÁDNÉ
- OPTIMISTICKÝ
- OPTIMISTIC_FORCE_INCREMENT
- PESSIMISTIC_FORCE_INCREMENT
- PESSIMISTIC_READ
- PESSIMISTIC_WRITE
- ČTĚTE
- NAPIŠTE
Chcete-li však ve svém dotazu povolit SKIP LOCKED, můžete použít tyto alternativy:
- Použijte konkrétní funkci implementace JPA, jako je Hibernate LockMode což umožňuje specifikovat SKIP LOCKED prostřednictvím dotazu JPA, díky kombinaci PESSIMISTIC_WRITE LockModeType Specifické nastavení časového limitu zámku, jak je popsáno výše
- Vytvořte nativní dotaz SQL stejně jako vy