一对一: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对应的studentsteacher.setStudents(null);
结果:删除成功
修改teacher对应的students
Iterator it = teacher.getStudents().iterator();
while(it.hasNext()){
Student s = (Student)it.next();
s.setName("zhangsan");
}