public void saveList(Param param,List<Double> planPriceList){
Date date=new Date();
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
        java.sql.Date d=new java.sql.Date(date.getTime());
        
if(planPriceList != null && planPriceList.size() != 0 && param.getTimeType().equals("1")){
for(int i = 0; i<planPriceList.size(); i++){
param.setAmt(planPriceList.get(i));
Integer j = i + 1;
param.setMonthValue(j.toString());         
        param.setCreateDate(d);
                
                Param saveParam = new Param();
                saveParam.setActiveFlag(param.getActiveFlag());
                saveParam.setAmt(param.getAmt());
                saveParam.setAuditor(param.getAuditor());
                saveParam.setBusinessType(param.getBusinessType());
                saveParam.setCompanyType(param.getCompanyType());
                saveParam.setCreateDate(d);
                saveParam.setFourSId(param.getFourSId());
                saveParam.setGroupId(param.getGroupId());
                saveParam.setMonthValue(param.getMonthValue());
                saveParam.setOperator(param.getOperator());
                saveParam.setTimeType(param.getTimeType());
                saveParam.setUpdateDate(param.getUpdateDate());
                saveParam.setYearValue(param.getYearValue());
super.save(saveParam);
}
}
else if(param.getTimeType().equals("0") && param.getAmt() != null){
for(int i=0; i<12; i++){
                Param saveParam = new Param();
                param.setCreateDate(d);
                saveParam.setActiveFlag(param.getActiveFlag());
                saveParam.setAmt(param.getAmt());
                saveParam.setAuditor(param.getAuditor());
                saveParam.setBusinessType(param.getBusinessType());
                saveParam.setCompanyType(param.getCompanyType());
                saveParam.setCreateDate(param.getCreateDate());
                saveParam.setFourSId(param.getFourSId());
                saveParam.setGroupId(param.getGroupId());
                saveParam.setMonthValue(param.getMonthValue());
                saveParam.setOperator(param.getOperator());
                saveParam.setTimeType(param.getTimeType());
                saveParam.setUpdateDate(param.getUpdateDate());
                saveParam.setYearValue(param.getYearValue());
super.save(saveParam);
}
}
}
这是 dao层的          我从页面获取一个对象和一个list<Double>      list里面存储了12个值     对应与对象中的
每个月的计划金额         一共有十二个月           所以我要存储12次可是         如果        我直接在for循环里写
param.setAmt(planPriceList.get(i));         然后save(param);      数据库中保存的只有一条记录除非再 new 个新的对象一一赋值                 才可以 我试过              把param。id         清空            但是没用         还是只保存一次   
为什么              这个应该是关于   hibernate的原理            我不明白

解决方案 »

  1.   

    POJO在执行save方法后会被自动添加上主键所以后面的save无效应该是这个原因吧?
      

  2.   

    把你有问题的代码发上来瞧瞧呗?另外你事物在super.save(saveParam);里面还是在这个类里面注解的?
      

  3.   

    代码冗余太大很多代码重复写了。。public void saveList(Param param,List<Double> planPriceList){}这里船进入的就是Param对象。。为什么进去以后还要new Param();然后再将param的参数取出来又存到saveParam中、?你的代码如果执行else if里面的代码 就会连续存12个相同的对象
    改了一下for循环:
    public void saveList(Param param, List<Double> planPriceList) {
    Date date = new Date(); if (planPriceList == null || planPriceList.size() == 0 || param == null) return;
    if(param.getTimeType().equals("1")){
    for (int i = 0; i < planPriceList.size(); i++) {
    param.setAmt(planPriceList.get(i));
    Integer j = i + 1;
    param.setMonthValue(j.toString());
    param.setCreateDate(date);
    super.save(param);
    }
    }
    }由于hibernate session缓存的原因。导致连续保存时hibernate认为是同一个对象。所以只保存了一个。。
    解决办法是:
    每次保存都清空一下缓存。。
    在sava方法中,保存以后加两句:
    session.flush(); 
    session.clear();