【发布时间】:2017-01-09 23:43:05
【问题描述】:
我想使用jdbcTemplate向mysql数据库中插入多条记录,所以我选择使用batchUpdate方法,这是我的代码:
@Override
public void actualizarAmortizaciones(List<Amortizacion> lstAmortizaciones) {
jdbcTemplate.batchUpdate("{call contable.spact_amortizaciones(?,?,?,?,?,?,?,?,?,?)}", new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
Amortizacion objAmortizacion = lstAmortizaciones.get(i);
ps.setString(1, objAmortizacion.getStrId());
ps.setString(2, objAmortizacion.getStrTarjeta());
ps.setInt(3, objAmortizacion.getIntNumeroAmortizacion());
ps.setDate(4, (Date) objAmortizacion.getDatFechaPago());
ps.setString(5, objAmortizacion.getStrHoraPago());
ps.setInt(6, objAmortizacion.getIntCubierto());
ps.setBigDecimal(7, objAmortizacion.getBdTotalPagado());
ps.setBigDecimal(8, objAmortizacion.getBdCapitalPagado());
ps.setBigDecimal(9, objAmortizacion.getBdInteresPagado());
ps.setBigDecimal(10, objAmortizacion.getBdIvaPagado());
}
@Override
public int getBatchSize() {
return lstAmortizaciones.size();
}
});
}
下一行报错
Amortizacion objAmortizacion = lstAmortizaciones.get(i);
这是错误:
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.bo.Amortizacion
at com.dao.impl.TransaccionDAO$1.setValues(TransaccionDAO.java:49)
at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:956)
at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:946)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:629)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:658)
at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:946)
at com.dao.impl.TransaccionDAO.insertarAmortizaciones(TransaccionDAO.java:44)
有人知道为什么会这样吗?
提前致谢。
更新
我使用以下代码从 json(我正在使用 gson)获取列表解析:
@SuppressWarnings("unchecked")
@RabbitListener(queues = "generarAmortizacionesContable")
public void generarAmortizaciones(String json){
Gson gson = new Gson();
List<Amortizacion> lstAmortizaciones = gson.fromJson(json, List.class);
transaccionBS.insertarAmortizaciones(lstAmortizaciones);
}
但我注意到,当我调试代码时,列表包含 LinkedTreeMapElements,所以我不知道这是否是一个好的行为
【问题讨论】:
-
lstAmortizaciones的类型是什么?您从哪里获得该列表? -
让我更新我的问题以更好地解释我自己,知道你可以看到我的变化
标签: java mysql spring jdbctemplate