实体:
package bi.many2many.jointable;
import java.util.HashSet;
import java.util.Set;
public class Student {
private int id;
private String name;
private Set<Teacher> teachers = new HashSet<Teacher>();
public Student() {
}
public Student(int id, String name, Set<Teacher> teachers) {
super();
this.id = id;
this.name = name;
this.teachers = teachers;
}
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;
}
public Set<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(Set<Teacher> teachers) {
this.teachers = teachers;
}
}
package bi.many2many.jointable;
import java.util.HashSet;
import java.util.Set;
public class Teacher {
private int id;
private String name;
private Set<Student> students = new HashSet<Student>();
public Teacher() {
}
public Teacher(int id, String name, Set<Student> students) {
super();
this.id = id;
this.name = name;
this.students = students;
}
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;
}
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
}
hbm映射文件:
<hibernate-mapping>
<class name="bi.many2many.jointable.Student">
<id name="id" column="sid">
<generator class="native" />
</id>
<property name="name" type="string" column="name"></property>
<set name="teachers" table="studentteacher">
<key column="sid"></key>
<many-to-many class="bi.many2many.jointable.Teacher" column="tid"></many-to-many>
</set>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="bi.many2many.jointable.Teacher">
<id name="id" column="tid">
<generator class="native" />
</id>
<property name="name" type="string" column="name"></property>
<set name="students" table="studentteacher" inverse="true">
<key column="tid"></key>
<many-to-many class="bi.many2many.jointable.Student" column="sid"></many-to-many>
</set>
</class>
</hibernate-mapping>
测试文件:
public class Test {
@org.junit.Test
public void testAdd() {
SessionFactory sf = HibernateUtil.getSessionFactory();
Session session = sf.getCurrentSession();
session.beginTransaction();
Teacher t1 = new Teacher();
t1.setName("李刚");
Teacher t2 = new Teacher();
t2.setName("张孝祥");
Teacher t3 = new Teacher();
t3.setName("马士兵");
Student s1 = new Student();
s1.setName("张三");
s1.getTeachers().add(t1);
s1.getTeachers().add(t2);
s1.getTeachers().add(t3);
Student s2 = new Student();
s2.setName("李四");
s2.getTeachers().add(t3);
s2.getTeachers().add(t2);
session.save(t1);
session.save(t2);
session.save(t3);
session.save(s1);
session.save(s2);
session.beginTransaction().commit();
}
}
测试结果:
Hibernate: insert into Teacher (name) values (?)
Hibernate: insert into Teacher (name) values (?)
Hibernate: insert into Teacher (name) values (?)
Hibernate: insert into Student (name) values (?)
Hibernate: insert into Student (name) values (?)
Hibernate: insert into studentteacher (sid, tid) values (?, ?)
Hibernate: insert into studentteacher (sid, tid) values (?, ?)
Hibernate: insert into studentteacher (sid, tid) values (?, ?)
Hibernate: insert into studentteacher (sid, tid) values (?, ?)
Hibernate: insert into studentteacher (sid, tid) values (?, ?)