论坛首页 Java企业应用论坛

关于hibernate 的one-to-many级联更新 产生脏数据的解决办法

浏览 2872 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-04-26   最后修改:2010-04-26

之前其实就有遇到这个问题。我是在多的一方先删除掉数据 。再进行one端的update的。不然数据库里就会产生脏数据。例如

teacher.getStudentSet().clear(); 
Set newStudentSet = new HashSet(); 
//将新学生加入newStudentSet中 
teacher.setStudentSet(newStudentSet); 
dao.update(teacher); 

 

执行以上的方法  会产生如下效果。

students端新插入了数据。但是之前插入的记录的外键变为空,而没有被删除掉。

 

一直认为有很好的其他办法解决。但是就没去尝试。今天查了下。有个方法是这样的。但是不确定这是好方法。


在one实体中增加如下方法

 public void addStudentSet(Student s) {
        getStudentSet().add(s);
        s.setPerson(this);
    }

 
设置cascade="all-delete-orphan"

在方法中

DAO dao= (DAO) BeanFactory.getBean("dao"); 
Teacher teacher = dao.getTeacherById(teacherId); 
teacher.getStudentSet().clear();

//将新学生加入newStudentSet中 
teacher.addStudentSet(student1); 
teacher.addStudentSet(student2);
teacher.addStudentSet(student3);
dao.update(teacher); 

 

据说这样就可以避免脏数据的产生。不知道这样是否是正确合理的方法。有更好的方法还请大家指导下啊。

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics