首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

hibernate save,该怎么解决

2012-01-23 
hibernatesavepublic void saveList(Param param,ListDouble planPriceList){Date datenew Date()Simp

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(); 

热点排行