Я использую приведенное ниже определение bean-компонента для настройки считывателя для чтения некоторых данных из таблицы базы данных в проекте Spring Batch.Он использует именованный параметр в SQL.Я передаю java.util.List в качестве параметра.Тем не менее я получаю сообщение об ошибке типа недопустимого столбца при попытке запустить SQL.
Если я просто жестко кодирую одно единственное значение (namedParameters.put("keys", "138219");
) вместо передачи списка, это работает.
@Bean
public JdbcCursorItemReader<MyDTO> myReader() {
JdbcCursorItemReader<MyDTO> itemReader = new JdbcCursorItemReader<>();
itemReader.setDataSource(myDatasource);
itemReader.setRowMapper(return new RowMapper<MyDTO>() {
@Override
public MyDTO mapRow(ResultSet resultSet, int rowNum) throws SQLException {
return toRetailSeasonalE3PromotionDTO(resultSet);
}
};);
Map<String, Object> namedParameters = new HashMap<>();
List<Long> keys= //Some List
Map<String, List<Long>> singletonMap = Collections.singletonMap("keys", keys);
namedParameters.putAll(singletonMap);
itemReader.setSql(NamedParameterUtils.substituteNamedParameters("SELECT A FROM MYTABLE WHERE KEY IN (:keys)",new MapSqlParameterSource(namedParameters)));
ListPreparedStatementSetter listPreparedStatementSetter = new ListPreparedStatementSetter();
listPreparedStatementSetter.setParameters(
Arrays.asList(NamedParameterUtils.buildValueArray("SELECT A FROM MYTABLE WHERE KEY IN (:keys)", namedParameters)));
itemReader.setPreparedStatementSetter(listPreparedStatementSetter);
return itemReader;
}
Я сослался пример кода здесь как ответ на один из вопросов , заданных - это то, что, кажется, работает, когда мы передаем одно значение.Тем не менее, моя проблема заключается в передаче списка вместо одного значения в параметре.Это где, кажется, не удается.