多对多双向关联关系配置
多对多关联需要通过另外的一张表保存多对多的映射关系
例如:学生的选课,在建立数据表时需要提供3个表来建立连接,其中包括
学生表(students)课程表(courses)和学生选课表(student_course)
在student_course表中,字段student_id 和course_id作为联合主键并且
分别作为外键参照students表和courses表
1.在学生和课程的持久化类中分别定义Set类型的属性
2 .类Student的映射文件中使用<set>元素配置多对多的关联的关系
Student.hbm.xml配置如下;添加属性:private Set<Course> courses = new HashSet<Course>();
<hibernate-mapping> <class name="com.cong.student.Student" table="students"> <id name="id" column="id" type="java.lang.Long"> <generator class="native"/> </id> <property name="sname" type="string"> <column name="sname" length="30"/> </property> <set name="courses" table="student_course" lazy="true" //name的值为类Student中的属性 lazy为true表示懒加载 inverse="true" cascade="save-update"> //inverse为true表示当前的一端为镜像端,cascade表示级联 <key column="student_id"/> //指定student_course表参照students表里的外键字段名称 <many-to-many class="com.cong.student.Course" column="course_id"/> //class表示多对多关联中的另一方的持久化类的全路径,column指定student_course表中参照courses表的外键字段名称 </set> </class> </hibernate-mapping>
3.类Course的映射文件中使用<set>元素配置多对多的关联的关系
Course.hbm.xml文件的配置如下:添加属性:private Set<Student> students = new HashSet<Student>();
<hibernate-mapping> <class name="com.cong.student.Course" table="courses"> <id name="id" column="id" type="java.lang.Long"> <generator class="native"/> </id> <property name="cname" type="string"> <column name="cname" length="30"/> </property> <set name="students" table="student_course" lazy="true" cascade="save-update"> <key column="course_id"/> <many-to-many class="com.cong.student.Student" column="student_id"/> </set> </class> </hibernate-mapping
注:多对多关联关系也分为单向关联和双向关联,以上为双向关联,单向关联只需在一个实体类中定义Set
类型属性以及在其映射文件中进行相应的配置即可