多对多关系采用 中间表连接的映射策略。建立的中间表将分别引入两边的主键做为外键
@SuppressWarnings(
"
serial
"
)
@Entity
@Table(name
=
"
Student
"
)

public
class
Student implements Serializable
...
{
private Integer studentid;
private String StudentName;
private Set<Teacher> teachers = new HashSet<Teacher>();

public Student() ...{}

public Student(String studentName) ...{
StudentName = studentName;
}
@Id
@GeneratedValue

public Integer getStudentid() ...{
return studentid;
}

public void setStudentid(Integer studentid) ...{
this.studentid = studentid;
}
@Column(nullable=false, length=32)

public String getStudentName() ...{
return StudentName;
}

public void setStudentName(String studentName) ...{
StudentName = studentName;
}
@ManyToMany(mappedBy = "students") //mappedBy定义了student为双向关系的维护端

public Set<Teacher> getTeachers() ...{
return teachers;
}

public void setTeachers(Set<Teacher> teachers) ...{
this.teachers = teachers;
}
}
@SuppressWarnings(
"
serial
"
)
@Entity
@Table(name
=
"
Teacher
"
)

public
class
Teacher implements Serializable
...
{
private Integer teacherid;
private String TeacherName;
private Set<Student> students = new HashSet<Student>();

public Teacher() ...{}

public Teacher(String teacherName) ...{
TeacherName = teacherName;
}
@Id
@GeneratedValue

public Integer getTeacherid() ...{
return teacherid;
}

public void setTeacherid(Integer teacherid) ...{
this.teacherid = teacherid;
}
@Column(nullable=false, length=32)

public String getTeacherName() ...{
return TeacherName;
}

public void setTeacherName(String teacherName) ...{
TeacherName = teacherName;
}
@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;
}

public void addStudent(Student student) ...{

if (!this.students.contains(student)) ...{
this.students.add(student);
}
}


public void removeStudent(Student student) ...{
this.students.remove(student);
}
}



















































































































