zoukankan      html  css  js  c++  java
  • Hibernate的关联映射--一对多、

    这是我
    1 单向一对多:
    实体类:(课程类)Grade与(学生类)Student的一对多关系
    学生类:

    public class Student implements java.io.Serializable {
        // Fields
        private Long id;
        private String name;
        private Integer age;
        private Long gradeId;
        //省略set、get方法
    }

    bhm.xml:

    <hibernate-mapping>
        <class name="com.zx.model.Student" table="student" catalog="hibernate">
            <id name="id" type="java.lang.Long">
                <column name="id" />
                <generator class="native" />
            </id>
            <property name="name" type="java.lang.String">
                <column name="name" length="50" />
            </property>
            <property name="age" type="java.lang.Integer">
                <column name="age" />
            </property>
            <property name="gradeId" type="java.lang.Long">
                <column name="grade_id" />
            </property>
        </class>
    </hibernate-mapping>

    课程类:

    public class Grade implements java.io.Serializable {
        // Fields
        private Long id;
        private String name;
    }

    xml

    <hibernate-mapping>
        <class name="com.zx.model.Grade" table="grade" catalog="hibernate">
            <id name="id" type="java.lang.Long">
                <column name="id" />
                <generator class="native" />
            </id>
            <property name="name" type="java.lang.String">
                <column name="name" length="50" />
            </property>
    
            <!-- 配置与student一对多的关系-->
            <set name="students" inverse="true" cascade="delete">  
                <key column="grade_id" />  
                <one-to-many class="com.zx.model.Student"/>  
            </set>  
        </class>
    </hibernate-mapping>

    测试findById():

        public static void main(String[] args) {
            GradeDAO gradeDAO = new GradeDAO();
            Grade grade = new Grade();
            grade.setId(1L);
            Grade grade2 = gradeDAO.findById(1L);   
            for (Student stu : grade2.getStudents()) {
                log.debug(stu.getName());
            }
        }

    关联查询不管inverse、cascade为何值时,都会查询到课程对应得学生集合。插入时只插入一张表,不会级联。

    2 双向关联映射
    在两个关联实体中,同时配置了两种关联关系,这是这两个实体间就形成了双向关联映射,查询数据时互不影响,但是插入、更新、删除数据就会产生级联更新的问题。一班来说关系的维护交给多的一方维护,那么就需要在“一”的一方的配置文件中,加入invers=”true”的设置。
    Student:

       <hibernate-mapping>
        <class name="com.zx.model.Student" table="student" catalog="hibernate">
            ....
            <!-- 
            <property name="gradeId" type="java.lang.Long">
                <column name="grade_id" />
            </property> -->
    
            <!-- 配置双向关联 -->
            <many-to-one name="grade">
                <column name="grade_id"></column>
            </many-to-one>
        </class>
    </hibernate-mapping>

    Grade:

    <hibernate-mapping>
        <class name="com.zx.model.Grade" table="grade" catalog="hibernate">
            ...
    
            <!-- 配置与student一对多的关系, **维护关系交给多的一方维护** -->
            <set name="students" inverse="true" cascade="all">  
                <key column="grade_id" />  
                <one-to-many class="com.zx.model.Student"/>  
            </set>  
        </class>
    </hibernate-mapping>
  • 相关阅读:
    ACM Red and Black
    ACM Wooden Stricks
    ACM Strange fuction
    ACM pie
    ACM Doing Homework again
    ACM FatMouse' Trade
    ACM 今年暑假不AC
    ACM Ignatius and the Princess II
    一、数组---第三大的数
    一、数组---移动零※※※※※※
  • 原文地址:https://www.cnblogs.com/sean-zeng/p/11024793.html
Copyright © 2011-2022 走看看