Hibernate关联关系配置-----基于连接表的双向多对多配置
实体:
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 (?, ?)

浙公网安备 33010602011771号