之前其实就有遇到这个问题。我是在多的一方先删除掉数据 。再进行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);
据说这样就可以避免脏数据的产生。不知道这样是否是正确合理的方法。有更好的方法还请大家指导下啊。