使用saveOrUpdate方法时,若hibernate的session存在了两个具有相同id的不同实体,则会报错

hibernate中savaOrUpdate(entity)方法的使用:通过entity中有无id判断实体是否已存在,如果实体已经存在则修改,如果实体不存在则保存。

假设TabStu 为学生实体,实体中有id、学号stuNo、姓名stuName、年龄stuAge、性别stuSex、创建时间createTime、修改时间modifyTime属性.

下面这种方法不会引起其他错误

正确方法:

//首先,通过页面获取要保存的学生信息

String stuNo=request.getParameter("stuNo");

String stuName=request.getParameter("stuName");

String stuAge=request.getParameter("stuAge");

String stuSex=request.getParameter("stuSex");


//通过学号查询该学生信息

TabStu stu=tabStuDaoImpl.getTabParaEntity(stuNo);

//如果该学生信息存在,则把该学生可修改属性清空.。如果该学生信息不存在,则new一个学生实体。

if(stu!=null){

stu.setStuNo(null);

stu.setStuName(null);

stu.setStuAge(null);

stu.setStuSex(null);


}else{

stu =new TabStu();

}

if(stuNo!=null  &&"".equal(stuNo))){

//如果获取到的学号不为空

stu.setStuNo(Long.valueOf(stuNo));

}

if(stuName=null && "".equal(stuName)){

//如果获取到的名字不为空

stu.setName(stuName);

}

if(stuAge!=null  &&"".equal(stuAge))){

//如果获取到的年龄不为空

stu.setStuAge(Long.valueOf(stuAge));

}

if(stuSex=null && "".equal(stuSex)){

//如果获取到的性别不为空

stu.setSex(stuSex);

}

if(stu.getId()!=null && !"".equal(stu.getId())){

//如果id不为空,说明该学生信息已存在,设置修改时间

stu.setModifyTime(new Date());

}else{

//如果id为空,说明该学生信息不存在,设置创建时间

stu.setCreateTime(new Date());

}

tabStuDaoImpl.saveOrUpdate(stu);

注:这种方法略显繁琐,但是简单易懂,不会引起其他问题,谁有更好的解决方案,可以写到下面


错误方法:

//首先,通过页面获取要保存的学生信息

String stuNo=request.getParameter("stuNo");

String stuName=request.getParameter("stuName");

String stuAge=request.getParameter("stuAge");

String stuSex=request.getParameter("stuSex");


//通过学号查询该学生信息

TabStu stu=tabStuDaoImpl.getTabParaEntity(stuNo);

//下面红色部分对应上面的蓝色部分

//new一个学生实体

TabStu stu1 =new TabStu();

if(stu!=null ){

//如果stu不为空,则将stu的id赋给新建的实体stu

stu1.setId(Long.valueOf(stu.getId()));

}

if(stuNo!=null  &&"".equal(stuNo))){

//如果获取到的学号不为空

stu1.setStuNo(Long.valueOf(stuNo));

}

if(stuName=null && "".equal(stuName)){

//如果获取到的名字不为空

stu1.setName(stuName);

}

if(stuAge!=null  &&"".equal(stuAge))){

//如果获取到的年龄不为空

stu1.setStuAge(Long.valueOf(stuAge));

}

if(stuSex=null && "".equal(stuSex)){

//如果获取到的性别不为空

stu1.setSex(stuSex);

}

if(stu.getId()!=null && !"".equal(stu.getId())){

//如果id不为空,说明该学生信息已存在,设置修改时间

stu.setModifyTime(new Date());

}else{

//如果id为空,说明该学生信息不存在,设置创建时间

stu1.setCreateTime(new Date());

}

tabStuDaoImpl.saveOrUpdate(stu1);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值