首页 > 解决方案 > 在 Spring Boot 应用程序中使用 JPA 查询或本机 sql 查询进行多行更新

问题描述

您好我正在尝试在 Spring Boot 应用程序中使用单个查询来更新多行。我有一个映射,其中键返回行的 id,值是要为该键更新的值。一个键要更新的值是不同的。

我无法使用该 Map 形成查询来更新多行。附上了一个伪代码。我正在使用 PostgresSQL 12.1

Map<String,String> a;
@Query("UPDATE tableName set columnA=:valueList where columnB=:keyList",nativeQuery=true)
public void updateQ(List<String> keyList, List<String> valueList);

标签: javapostgresqljpaspring-data-jpajpa-2.1

解决方案


使用本机查询,您可以编写几行代码来循环遍历地图并生成类似于以下查询的内容。

UPDATE
   TABLE_NAME
SET
   TABLE_NAME.VALUE_COLUMN = table2.valueColumn
FROM
   TABLE_NAME table1
INNER JOIN
   (select * FROM (VALUES ('key1','value1'),('key2','value2'),('key3','value3')) as staticTable (keyColumn , valueColumn)) table2
ON
   table1.KEY_COLUMN = table2.keyColumn  

不过,如果您计划一次更新数百条记录,我建议您考虑其他选项。


推荐阅读