如何在两个表之间使用Spring Data JPA Repository进行更新查询?

时间:2016-01-29 05:01:36

标签: jpa

我有2个表ABC和XYZ,而deviceId(ABC中的PK)用作外键。 我怎么能以某种方式使用spring数据JPA repo方法 - updateDeviceType(在ABC表中),如果我想进行如下所示的更新查询,

ABCRepository

@Modifying
@Query(name = "updateDeviceType", value = "UPDATE ABC abc,XYZ xyz SET abc.deviceType = ?1 WHERE abc.deviceId = xyz.deviceId.deviceId AND xyz.deviceId.deviceId= ?2")

错误就像 引起:org.hibernate.hql.internal.ast.QuerySyntaxException:期待“set”,在第1行第45列附近找到','

1 个答案:

答案 0 :(得分:0)

您的JPQL update query似乎不正确。由于你没有发布你的ABC和XYZ课程,我只能告诉你要找到类似于以下内容的东西:

UPDATE ABC abc 
SET abc.deviceType = ?1 
WHERE 
    EXISTS (
        SELECT 1
        FROM XYZ xyz 
        WHERE 
            abc.deviceId = xyz.deviceId.deviceId 
            AND xyz.deviceId.deviceId= ?2
    )

这是一个相当复杂的查询,我建议从中创建一个命名查询,而不是在@Query注释中保存它。

旁注:您还应该记住,如果您只打算部署到单一类型的数据库并且它提供更好的UPDATE语法,则可以选择在JPA和Spring Data JPA中使用本机查询。