代码之家  ›  专栏  ›  技术社区  ›  Janar

Spring数据JPA+Hibernate跳过锁定行(PostgreSQL)

  •  2
  • Janar  · 技术社区  · 6 年前

    我试图使用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_

    我错过了什么?

    0 回复  |  直到 6 年前
        1
  •  0
  •   Laurenz Albe    5 年前

    您可以使用nativeQuery。

    @Query(value = "SELECT * FROM task LIMIT 10 FOR UPDATE SKIP LOCKED", nativeQuery = true)
    List<TaskEntity> fetchAllUnlocked();