。
我需要从尚未处理的表中返回一个项目 id(在给定时间可能有多个可用,但我需要为每个请求返回唯一 id)。
-
我正在使用 JPA 本机查询从数据库获取第一条记录
@Lock(LockModeType.PESSIMISTIC_READ) @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value ="5000")}) @Query(value = "SELECT id FROM item WHERE name->> 'name'=:name AND city->> 'city'=:city LIMIT 1",nativeQuery = true) public String find(@Param("name") String name, @Param("city") String city);
-
发布我正在使用更新查询将状态更改为已处理的帖子
- 返回身份证件
上述场景会引发异常,指出"Lock 使用无效"(因为它不支持本机查询,仅支持 crud 操作)。
需要帮助才能在争用条件下使用本机查询对 SELECT for UPDATE 和 SKIP 锁定行使用PESSIMISTIC_READ本机查询
通过在查询中添加以下行解决了这个问题。
对于更新跳过锁定
@Query(value = "SELECT id FROM item WHERE name->> 'name'=:name AND city->> 'city'=:city LIMIT 1 FOR UPDATE SKIP LOCKED",nativeQuery = true)
public String find(@Param("name") String name, @Param("city") String city);