关于关系的一些基本知识点,请查看总结篇:Hibernate 关系映射
对象模型:参考Hibernate 关系映射 —— 单向多对多
Annotation方式:
配置方式同单向多对多的方式相同,不同的是:在student 的配置上需要在getTeachers()方法上使用@ManyToMany(mappedBy)
具体代码如下:
package com.zyh.hibernate;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
@Entity
public class Teacher {
private int id;
private String name;
private Set<Student> students = new HashSet<Student>();
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToMany
@JoinTable(
name="tea_stu",
joinColumns={@JoinColumn(name="tea_id")},
inverseJoinColumns={@JoinColumn(name="stu_id")}
)
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
}
package com.zyh.hibernate;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
@Entity
public class Student {
private int id;
private String name;
private Set<Teacher> teachers = new HashSet<Teacher>();
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToMany(mappedBy="students")
public Set<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(Set<Teacher> teachers) {
this.teachers = teachers;
}
}
xml方式:
Teacher.hbm.xml 配置方式和 单向多对多相同,另外还需在Student.hbm.xml中配置<set><key></key><many-to=many></many-to-many></set>具体配置:
Teacher.hbm.xml:
<hibernate-mapping>
<class name="com.zyh.hibernate.Teacher" table="_teacher">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="name" column="name" />
<set name="students" table="t_s">
<key column="teacher_id"></key>
<many-to-many class="com.zyh.hibernate.Student" column="student_id" ></many-to-many>
</set>
</class>
</hibernate-mapping>
Student.hbm.xml:
<hibernate-mapping>
<class name="com.zyh.hibernate.Student" table="_student">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="name" column="name" />
<set name="students" table="t_s">
<key column="student_id"></key>
<many-to-many class="com.zyh.hibernate.Teacher" column="teacher_id" ></many-to-many>
</set>
</class>
</hibernate-mapping>
注意上述两个配置文件中的set标签配置的不同处