如何在 JPQL(Spring JPA 查询)中使用 JOIN 执行 UPDATE 语句?

Posted

技术标签:

【中文标题】如何在 JPQL(Spring JPA 查询)中使用 JOIN 执行 UPDATE 语句?【英文标题】:How can I do an UPDATE statement with JOIN in JPQL (Spring JPA Queries)? 【发布时间】:2017-11-19 13:40:21 【问题描述】:

这是此问题Update Statement with JOIN in SQL 的扩展,但我正在尝试使用 Spring Data JPQL。

我正在尝试在 JPQL 中使用 Update 和 JOIN,如下所示

@Modifying
@Query("UPDATE TotalValue tv JOIN LineItems li WHERE li.totalValue.totalValueId=:totalValuedId SET tv.totalAmount =sum(li.itemTotalValue) ")
void calculateTotalAmount(@Param("totalValuedId") Long totalValuedId);

但是,我收到如下错误

org.hibernate.hql.internal.ast.QuerySyntaxException: 期待“set”,发现 'JOIN'

在 JPQL 中不能进行 UPDATE 和 JOIN 吗?有什么选择。谢谢

【问题讨论】:

【参考方案1】:

JPQL syntax 似乎表明在 UPDATE 语句中实际上不可能进行 JOIN。

【讨论】:

非常感谢。我也有同样的怀疑。替代方案只是本机查询吗? 通常可以在没有显式连接的情况下制定更新,只需使用属性导航,但我需要查看实体的相关部分才能确定。否则,是的,我认为本机查询将适用。 感谢您的帮助。

以上是关于如何在 JPQL(Spring JPA 查询)中使用 JOIN 执行 UPDATE 语句?的主要内容,如果未能解决你的问题,请参考以下文章

Spring jpa jpql查询

JPQL 的 Spring Boot JPA“查询验证失败”错误

无法在 FROM 子句中使用子查询编写 JPQL 查询 - Spring Data Jpa - Hibernate

无法在 FROM 子句中使用子查询编写 JPQL 查询 - Spring Data Jpa - Hibernate

Spring JPA 和 Hibernate 的 JPQL 查询错误

没有 JPQL 查询的 Spring-data-jpa 中的 CURRENT_DATE