In my application - Oracle with JPA (EclipseLink), I\'m using the following expression to lock the subset of the records in some tables:
select * from MY_TABLE w
Hibernate provides the UPGRADE_SKIPLOCKED Lock mode.
Using JPA and Hibernate, to produce a "SKIP_LOCKED" as per Hibernate LockMode documentation, you have to combine the PESSIMISTIC_WRITE JPA LockModeType:
entityManager.find(Department.class, 1, LockModeType.PESSIMISTIC_WRITE);
and the Lock timeout setting, like for example in persistence.xml for your persistence unit:
(Note that you can configure this LockMode for complex query as well)
SKIP LOCKED is not part of ANSI SQL. Some RDBMS such the following provide this as a specific feature:
So with pure JPA, it is not possible to specify a "SKIP LOCKED" in queries. Indeed, as documented in LockModeType, JPA 2.1 only supports the following:
However, to enable SKIP LOCKED in your query you can use these alternatives: