使用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);

你可能感兴趣的:(java技术)