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

之前其实就有遇到这个问题。我是在多的一方先删除掉数据 。再进行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); 

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值