hibernate 级联修改删除

一对一:student  address

public class Student{

     int id;

     String name;

     Address address;


    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="student")

    public void getAddress(){

         return address;

     }

}


public class Address{

     String info;   //详细地址

     Student student;

        @OneToOne
@JoinColumn(name = "student_id", nullable = false)

    public  void getStudent(){

        return student;

      }

}


删除student的address:

方法1:

    student.setAddress(null);

    studentDao.update(student);

结果:address没有被删除

方法2:

    student.getAddress().setStudent(null);

结果:address表中student_id设置为null

方法3:

     student.getAddress().setStudent(null);

    student.setAddress(null);

结果:同方法2

方法4:

     addressDao.delete(student.getAddress());

结果:报异常:

              deleted object would be re-saved by cascade (remove deleted object from associations)

方法5:

          addressDao.delete(student.getAddress());

          student.setAddress(null);

结果:address删除成功


修改address的info

student.getAddress().setInfo(....);

结果:修改成功


一对多 的删除和修改 和一对一差不多


多对多  Teacher  Student

public class Teacher{

   

        private int id;
private String name;
private Set<Student> students = new HashSet<Student>();
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
public int getId() {
return id;
}
public String getName() {
return name;
}
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinTable(
name="teacher_student",
joinColumns={@JoinColumn(name="teacher_id")},
inverseJoinColumns={@JoinColumn(name="student_id")}
)
public Set<Student> getStudents() {
return students;
}
public void setId(int id) {
this.id = id;
}
@Column(name="name")
public void setName(String name) {
this.name = name;
}

public void setStudents(Set<Student> students) {
this.students = students;
}


}

public class Student{

        private int id;
private String name;
private Set<Teacher> teachers = new HashSet<Teacher>();
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
public int getId() {
return id;
}
public String getName() {
return name;
}
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY,mappedBy="students")
public Set<Teacher> getTeachers() {
return teachers;
}
public void setId(int id) {
this.id = id;
}
@Column(name="name")
public void setName(String name) {
this.name = name;
}

public void setTeachers(Set<Teacher> teachers) {
this.teachers = teachers;
}

}

 删除teacher对应的students

   teacher.setStudents(null);

结果:删除成功


修改teacher对应的students


            Iterator it = teacher.getStudents().iterator();
   while(it.hasNext()){
    Student s = (Student)it.next();
    s.setName("zhangsan");
   }




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值