NamedParameterJdbcTemplate.batchUpdate() takes a Map<String,Object>[]
for the list of parameters. I can't figure out how to instantiate the array in a way that doesn't get flagged with a "generic instantiation" error, or an "unchecked assignment" warning. I really wish Spring accepted a List of Maps instead of an array.
Yes I've read: How does one instantiate an array of maps in Java?
However, I don't control the spring-batch NamedParameterJdbcTemplate interface, so I can't change the signature of the batchUpdate() method.
I have a List<Map<String,Object>>
named params.
I have tried the following:
namedParameterJdbcTemplate.batchUpdate(
sql,
params.toArray(new Map<String,Object[0]) //generic instantiation error
);
namedParameterJdbcTemplate.batchUpdate(
sql,
params.toArray(new Map[0]) //unchecked assignment warning
);
Full code:
class MyItemWriter implements ItemWriter<MyRecord> {
@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public void write(List<? extends MyRecord> items) {
String sql = MyRecord.UPDATE_SQL;
List<Map<String,Object>> params
= items.stream()
.map(record->new MapBuilder<String,Object>()
.put("param1",record.getField1())
.put("param2",record.getField2())
.build())
.collect(Collectors.toList());
namedParameterJdbcTemplate.batchUpdate(
sql,
params.toArray(new Map<String,Object>[0]) //generic instantiation error
);
namedParameterJdbcTemplate.batchUpdate(
sql,
params.toArray(new Map[0]) //unchecked assignment warning.
);
}
}