将hashmap参数传递给insert方法时的classcastexception

时间:2013-11-21 10:56:48

标签: java spring ibatis

我正在尝试使用ibatis将多个对象插入到表中,我想当将HasMap参数传递给dao mapper方法时,类强制转换异常会被强制转换,因为断点不会被触发而插入查询不会记录。我试图传递一个列表,但得到了同样的例外。下面我发布了代码,目前我完全无能为力。映射有什么问题?

xml mapping:

    <insert id="insert" parameterType="java.util.HashMap">
INSERT INTO [ANTICIPI_F]
       ([ID],[ID_BATCH],[ID_FASCICOLO],[ABI],[CED]
       ,[ORIGINE],[TIPO],[IMPORTO],[PEZZI]
       ,[NUMERO_FATTURA],[PAGINA_FATTURA],[TRASMESSO]
       ,[NUMERO_FATTURA_ELAB],[DATA_CREAZIONE])
VALUES
   <foreach collection="anticipi" item="item" separator=",">
      (  #{item.ID} ,#{item.ID_BATCH},#{item.ID_FASCICOLO}
       ,#{item.ABI},#{item.CED},#{item.ORIGINE}
       ,#{item.TIPO},#{item.IMPORTO},#{item.PEZZI}
       ,#{item.NUMERO_FATTURA},#{item.PAGINA_FATTURA}
       ,#{item.TRASMESSO},#{item.NUMERO_FATTURA_ELAB}
       ,#{item.DATA_CREAZIONE})
   </foreach> 
</insert>

这是模型:

    public class AnticipoF implements Serializable{


    /**
     * 
     */
    private static final long serialVersionUID = 6679856006862546933L;
    private Integer ID;
    private Integer ID_BATCH;
    private String ID_FASCICOLO;
    private Integer ABI;
    private Integer CED;
    private String ORIGINE;
    private String TIPO;
    private Double IMPORTO;
    private Integer PEZZI;
    private String NUMERO_FATTURA;
    private Integer PAGINA_FATTURA;
    private Integer TRASMESSO;
    private String NUMERO_FATTURA_ELAB;
    private Date DATA_CREAZIONE;


//... getters and setters       
  //...equals and hashcode}

映射的方法签名:

public void insertAnticipiFatturaKofax(HashMap<String,Object> anticipiFattureKofax) throws SQLException;

哈希映射:

List<AnticipoFatturaKofax> anticipiFattureKofax = new ArrayList<AnticipoFatturaKofax>();
HashMap<String,Object> anticipi = new HashMap<String, Object>();
anticipi.put("anticipi", anticipiFattureKofax);
电话:

anticipiFattureKofaxMapper.insertAnticipiFatturaKofax(anticipi);

1 个答案:

答案 0 :(得分:0)

问题不在于ibatis,而是在spring aop注入的日志类中。 无论如何,因为我花了很多时间在这上面(我是ibatis和spring的初学者),对于早于2008的sql server,insert命令的正确映射是:

INSERT INTO [ANTICIPI_FATTURE_KOFAX]
       ([ID],[ID_BATCH],[ID_FASCICOLO],[ABI],[CED]
       ,[ORIGINE],[TIPO],[IMPORTO],[PEZZI]
       ,[NUMERO_FATTURA],[PAGINA_FATTURA],[TRASMESSO]
       ,[NUMERO_FATTURA_ELAB],[DATA_CREAZIONE])
   <foreach collection="anticipi" item="item" open="SELECT" separator="UNION ALL SELECT">
      #{item.ID} ,#{item.ID_BATCH},#{item.ID_FASCICOLO}
       ,#{item.ABI},#{item.CED},#{item.ORIGINE}
       ,#{item.TIPO},#{item.IMPORTO},#{item.PEZZI}
       ,#{item.NUMERO_FATTURA},#{item.PAGINA_FATTURA}
       ,#{item.TRASMESSO},#{item.NUMERO_FATTURA_ELAB}
       ,#{item.DATA_CREAZIONE}
   </foreach> 
</insert>