Hibernate的多对多关联映射

多对多双向关联关系配置 

多对多关联需要通过另外的一张表保存多对多的映射关系
  例如:学生的选课,在建立数据表时需要提供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
      类型属性以及在其映射文件中进行相应的配置即可

原文地址:https://www.cnblogs.com/qingcong/p/5919108.html