无法在Spring引导NamedParameterJdbcTemplate中插入或更新子查询进行批量更新



我试图使用NamedParameterJdbcTemplate batchupdate插入多个记录。我能够在插入语句中不使用子查询插入记录。但是当我使用子查询它返回dataintegrityviolationexception请找到下面的代码供您参考,

public void insertBatch(){
String sql = "insert into emp(id, name, age) values ((select max(id) from company where managerid = :managerid), :name, :age)";
List<Map<String, Object>> batchVales = new ArrayList<Map<String, Object>>();
batchValues.add(new MapSqlParameterSource().addValue("name", "example").addValue("age", 30).addValue("managerid", 10).getValues());
SqlParameterSource[] params = SqlParameterSourceUtils.createBatch(batchValues.toArray(new Map[1]));
jdbcTemplate.batchUpdate(sql, params);
}
在上面的代码中,我使用Subquery从公司表中获取max(id)。如果我使用这个子查询,它会返回错误。如果我删除和硬编码一些值,它的工作很好。为什么batchupdate不接受子查询。我正在使用DB2数据库

只支持INSERT INTO ... SELECT ...格式;而不是INSERT INTO ... VALUES ...形式的子查询。

INSERT语句的伪语法为:INSERT INTO EntityName properties_list select_statement.

试试:

String sql = "insert into emp(id, name, age) (select max(id) from company where managerid = :managerid), :name, :age";

更新:正如在注释中指出的,它应该是这样工作的:

String sql = "insert into emp(id, name, age) select max(id), :name, :age from company where managerid = :managerid;

不属于Select子查询的额外参数需要在Select子查询中合并。

最新更新