我正在使用实现从org.springframework.data.repository.CrudRepository和扩展的接口org.springframework.data.jpa.repository.JpaSpecificationExecutor我有一个org.springframework.data.jpa.repository.Query带有参数的查询的问题org.springframework.data.repository.query.Param我有这个查询..@Query(value = " SELECT c FROM Ctype c WHERE c.code = :code" + " FOR UPDATE nowait ")Ctype findOneByCodeNoWait( @Param("code") String code);我有这个错误:Caused by: java.lang.IllegalArgumentException: Validation failed for query for method public abstract org.company.persistence.entity.Ctype org.company.persist.repository.CtypeRepository.findOneByCodeNoWait(java.lang.String)!Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: FOR near line 1, column 111 [ SELECT c FROM org.company.persistence.entity.Ctype c WHERE c.code = :code FOR UPDATE nowait ]Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: FOR near line 1, column 111 [ SELECT c FROM org.company.persistence.entity.Ctype c WHERE c.code = :code FOR UPDATE nowait ]\"}}"我正在检查另一个帖子,但他们使用EntityManager...这个怎么解决?
1 回答
holdtom
TA贡献1805条经验 获得超10个赞
试试这个方法:
@Lock(LockModeType.PESSIMISTIC_READ)
@QueryHints(@QueryHint(name = "javax.persistence.lock.timeout",value = "0"))
@Query(value = " SELECT c FROM Ctype c WHERE c.code = :code")
我已经用我正在进行的项目和这段代码对此进行了测试:
@Lock(LockModeType.PESSIMISTIC_READ)
@QueryHints(@QueryHint(name = "javax.persistence.lock.timeout",value = "0"))
@Query("select t from Event t left join fetch t.details ")
List<Event> findAllWithDetails();
`
生成 sql 如下:
SELECT event0_.event_id ...
FROM EVENTS event0_
left outer join event_details details1_
ON event0_.event_id = details1_.event_id
FOR UPDATE NOWAIT
添加回答
举报
0/150
提交
取消
