Похоже, что вы смешиваете с именем и параметры позиционирования. Лучше использовать тот или иной, но не тот и другой.
Попробуйте
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("ids", year);
parameters.addValue("provnum", provnum);
return this.template.getJdbcOperations().query(
"SELECT * FROM INCOME WHERE PROVNUM=:provnum AND FISCALDATE IN (:ids)", this.rowMapper, parameters);
После Вашего комментария, я вижу, что вы используете неправильную перегрузку метода query()
: есть довольно много, чтобы выбрать из, так что не удивительно, несколько ошибок может ползти в!
Вам нужно позвонить
return this.template.getJdbcOperations().query(
"SELECT ... etc.", parameters, this.rowMapper);
В оригинальном вызове, вы вызываете версию query(String sql, RowMapper mapper, Object... params)
, что ожидает буквенные параметры. Пересмотренный вызов - это запрос (String sql, SqlParameterSource params, RowMapper mapper) - ключ SqlParamtersSource в качестве второго аргумента. Также стоит проверить, что вы используете NamedParameterJdbcTemplate.
Конкретная проблема не имеет ничего общего с предложением IN. – BalusC