标签:hibernate 多对多关联映射 注解 框架 orm
多对多映射采取中间表连接的映射策略,建立的中间表将分别引入两边的主键作为外键
Many
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import org.hibernate.annotations.GenericGenerator;
@Entity
public class Teacher implements java.io.Serializable {
private Integer teacherid;
private String name;
private Set<Student> students = new HashSet<Student>();
@Id
@GeneratedValue(generator = "TeacherGenerator")
@GenericGenerator(name = "TeacherGenerator", strategy = "native")
public Integer getTeacherid() {
return teacherid;
}
public void setTeacherid(Integer teacherid) {
this.teacherid = teacherid;
}
@Column(name = "name", nullable = false, length = 32)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// @ManyToMany表示Teacher是多对多关系的一端
// @JoinTable描述了多对多关系的数据表关系: name(中间表名称),joinColumns(中间表与Teacher表的外键关系),
// inverseJoinColumns(中间表与另外一端(Student)的外键关系)
// 中间表的Teacher_ID外键指向Teacher的主键teacherid
// 中间表的Student_ID外键指向Student的主键studentid
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinTable(name = "Teacher_Student",
joinColumns = { @JoinColumn(name = "Teacher_ID", referencedColumnName = "teacherid") },
inverseJoinColumns = { @JoinColumn(name = "Student_ID", referencedColumnName = "studentid") })
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
}Many
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
@Entity
public class Student implements java.io.Serializable {
private Integer studentid;
private String name;
private Set<Teacher> teachers = new HashSet<Teacher>();
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer getStudentid() {
return studentid;
}
public void setStudentid(Integer studentid) {
this.studentid = studentid;
}
@Column(name = "student_name", nullable = false, length = 32)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// @ManyToMany表示Student是多对多关系的一边
// 使用mappedBy属性将维护端交由另外一端(Teacher)
@ManyToMany(mappedBy = "students")
public Set<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(Set<Teacher> teachers) {
this.teachers = teachers;
}
}
删除学生,因为学生不是关系维护者,所以需先手工解除老师与学生的关联,然后再删除学生
删除老师,因为老师是关系维护者,所以可直接解除老师与学生的关系,不用手工解除
标签:hibernate 多对多关联映射 注解 框架 orm
原文地址:http://blog.csdn.net/hekewangzi/article/details/41594509