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