我试图使用Spring Data JPA(2.1)和Hibernate在PostgreSQL上执行跳过锁定查询。查询如下所示:
@Lock(LockModeType.PESSIMISTIC_WRITE) @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value ="-2")}) List<Obj> findByEntityAndStatus(Entity entity, Status status);
根据 Spring data JPA native query skip locked 和 Select for update skip locked from JPA level 它应该可以工作,但是生成的查询只选择更新而不跳过锁定的行。
生成的查询:
休眠:在obj0上从objs obj0左外部连接实体entity1选择obj0。id=entity1。id,其中entity1。id=?和obj0_uu.status=?用于更新obj0_
我错过了什么?
您可以使用nativeQuery。
@Query(value = "SELECT * FROM task LIMIT 10 FOR UPDATE SKIP LOCKED", nativeQuery = true) List<TaskEntity> fetchAllUnlocked();