我使用超酷的jdbcTemplate(更具体地说是NamedParameterJdbcTemplate)来运行带有IN子句的查询。我想要查询的列表是枚举,因此我收到错误:“转换中的数据类型不兼容”。
我注意到我用这个枚举查询的每个地方都要调用toString()。有没有办法告诉jdbcTemplate获取列表中对象的String值?
答案 0 :(得分:2)
我认为你需要某种覆盖:
public class MyNamedParameterJdbcTemplate extends NamedParameterJdbcTemplate {
public MyNamedParameterJdbcTemplate(final DataSource dataSource) {
super(dataSource);
}
@Override
public <T> T execute(final String sql, final Map<String, ?> paramMap, final PreparedStatementCallback<T> action) throws DataAccessException {
final Map<String, Object> newParam = new HashMap<>();
for (final Map.Entry<String, ?> entry : paramMap.entrySet()) {
if (entry instanceof Enum<?>) {
// param is an enum
newParam.put(entry.getKey(), ((Enum) entry).toString());
} else {
newParam.put(entry.getKey(), entry.getValue());
}
}
return super.execute(sql, newParam, action);
}
}
注意:未经过测试,Guava Maps.transformValues()
也是一个选项