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