当前位置: 代码迷 >> Java Web开发 >> hibernate save,该怎么解决
  详细解决方案

hibernate save,该怎么解决

热度:531   发布时间:2016-04-17 00:36:33.0
hibernate save
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的原理 我不明白




------解决方案--------------------
POJO在执行save方法后会被自动添加上主键

所以后面的save无效

应该是这个原因吧?
------解决方案--------------------
你是进去第一个对象还是最后一个对象

如果是第一个可能是我刚才说那个问题

如果最后一个那应该是事物的事
------解决方案--------------------
代码冗余太大。。。很多代码重复写了。。
Java code
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();
  相关解决方案