hibernate save

咕咕鸟-古琴 2011-11-26 09:04:06
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的原理 我不明白


...全文
102 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
咕咕鸟-古琴 2011-11-28
  • 打赏
  • 举报
回复
谢谢 我懂了
kouyiSC 2011-11-26
  • 打赏
  • 举报
回复
代码冗余太大。。。很多代码重复写了。。

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();
huan89517 2011-11-26
  • 打赏
  • 举报
回复
把你有问题的代码发上来瞧瞧呗?

另外你事物在super.save(saveParam);里面还是在这个类里面注解的?
huan89517 2011-11-26
  • 打赏
  • 举报
回复
你是进去第一个对象还是最后一个对象

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

如果最后一个那应该是事物的事
huan89517 2011-11-26
  • 打赏
  • 举报
回复
POJO在执行save方法后会被自动添加上主键

所以后面的save无效

应该是这个原因吧?

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧