当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring数据JPA存储库进行2个表之间的更新查询?

章心水
2023-03-14

我有两个表ABC和XYZ,deviceId(ABC中的PK)作为外键。如果我想要执行如下所示的更新查询,我如何使用spring data JPA repo方法--updateDeviceType(在ABC表中),

@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个答案

翁宏茂
2023-03-14

您的JPQL更新查询似乎不正确。由于你没有张贴你的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注释中。

附带说明:您还应该记住,如果您只打算部署到单一类型的数据库,那么在JPA和Spring Data JPA中可以使用本机查询,并且它提供了更好的更新语法。

 类似资料:
  • 我使用mongob作为java应用程序,并试图使用Spring数据存储库来更新文档。我使用@Query注释如下:@Query("{'username':?0 }, { $set:{'age':?1}}")无效updateAgeByUserName(String username, int age); 但这不管用。我知道保存将更新整个内容,但我只想使用更新查询更新年龄字段。我该怎么做? 感谢任何帮助

  • 问题内容: 我看到这对笨论坛 考虑以下代码 这显然是您在Codeigniter中这样做的方式 实际上这是行不通的。我看了一下生成的SQL,结果甚至没有提到联接。 有谁知道如何使用Codeigniter的Active Record数据库类对联接进行更新? 问题答案: 我发现的一种解决方案是完全删除联接并将联接条件移到“ where”函数中,此外,您还需要更改更新字符串以包括新表。

  • 问题内容: 我的本地Postgres数据库中有3个表: 在运行时,我会知道。我需要运行SQL来更新与此项目关联的内容,因此类似: 我可能必须执行某种嵌套或在子句中进行操作,但不确定如何执行此操作。提前致谢! 编辑 : 假设我有一条具有以下值的记录: 相应的(id = 23)具有以下值: 在运行时,我只有(458)。我需要在单个UPDATE语句中查找对应的(23)并将其更改为。 问题答案:

  • 又不想工作,我不知道是怎么回事。 日志包含以下消息: 将项目放在github https://github.com/romanych2021/testjpaspring上

  • 我有一个似乎工作正常的查询。 } 但是当我尝试将它与JPA一起使用并键入统计DTO时,我得到了以下错误: 具有路径 [/api] 抛出的异常的上下文 [请求处理失败; 嵌套异常是组织.springframework.core.convert.converter不常见: 找不到能够从类型 [org.springframework.data.jpa.repository.query.query.Abs

  • 问题内容: 我是Redis的新手,但我不知道如何创建和更改到另一个Redis数据库。 我该怎么做呢? 问题答案: 默认情况下,有16个数据库(索引从0到15),您可以使用select命令在它们之间导航。可以通过设置在redis配置文件中更改数据库数量。 默认情况下,它选择数据库。要选择一个指定的,使用 (选择数据库2)