[英]Spring Data JPA - SQL Grammar exception when trying to use IN clause with UPDATE Query
我正在尝试使用 Spring 数据 JPA 更新某个列表中的实体。 但是,我收到 SQL 语法异常。
这是方法:
@Modifying
@Query("UPDATE Call c set c.locationLocked = false, c.locationLockedBy = null, c.locationLockedOn = null WHERE c.callIdentifier IN :timedOutLockedCallsIdentifiers AND c.audit.retired = false")
int expireTimedOutLockedCalls(@Param("timedOutLockedCallsIdentifiers") List<String> timedOutLockedCallsIdentifiers);
这是根本原因:
Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near ")"
以编程方式执行它可能比在查询中更容易
在您的存储库中有以下内容
@Query("SELECT c FROM Call c WHERE c.callIdentifier IN :timedOutLockedCallsIdentifiers AND c.audit.retired = :retired")
List<Call> findByCallIdentifiers(List<String> timedOutLockedCallsIdentifiers, Boolean retired)
然后在你的 class
List<Call> updated = callRepo.findByCallIdentifiers(identifiers, false)
for(Call c : updated) {
c.setLocationLocked(false);
c.setLocationLockedBy(null);
c.setLocationLockedOn(null);
}
callRepo.saveAll(updated);
这将根据需要调用适当的底层更新,并且不能让 spring 正确处理查询语法
您在查询的IN
子句中传递 null 或空列表。
请在调用上述查询之前检查timedOutLockedCallsIdentifiers
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.