zoukankan      html  css  js  c++  java
  • 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
          类型属性以及在其映射文件中进行相应的配置即可

  • 相关阅读:
    POJ 3977 折半枚举
    [CQOI2007]余数求和 (分块+数学
    NOI P1896 互不侵犯 状压DP
    HDU 5446 Unknown Treasure (卢卡斯+CRT
    宁夏邀请赛F FLOYD
    P1414 又是毕业季II (数学?
    P2051 [AHOI2009]中国象棋 DP
    POJ 2449:Remmarguts' Date(A* + SPFA)
    HDU 6215:Brute Force Sorting(链表+队列)
    HDU 6207:Apple(Java高精度)
  • 原文地址:https://www.cnblogs.com/qingcong/p/5919108.html
Copyright © 2011-2022 走看看