繁体   English   中英

Spring 数据 JPA - SQL 尝试将 IN 子句与 UPDATE 查询一起使用时出现语法异常

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM