我想使用
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″)})