實體:
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 (?, ?)