Spring数据JPA本机查询跳过锁定

我想使用
Spring Data JPA在Oracle上执行SKIP LOCKED查询,所以我尝试了以下方法:

@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query(value = "SELECT * FROM User WHERE ID=?1 FOR UPDATE SKIP LOCKED", nativeQuery = true)
User findOne(UUID id);

我尝试了上面的内容,发现生成的查询包含FOR UPDATE,但不包含SKIP LOCKED(下面是从日志生成的查询):

select ent0_.column1 as name, ent0_.CREATED_DATE as CREATED_2_33_0_ from TABLE_NAME alias_name where ent0_.column1=? for update

如果我从查询方法中删除@Lock,则生成的查询甚至没有FOR UPDATE.

请根据需要建议如何使用FOR UPDATE SKIP LOCKED生成查询.

最佳答案 加:

@QueryHints({@QueryHint(name = “javax.persistence.lock.timeout”, value
=”-2″)})

点赞