zoukankan      html  css  js  c++  java
  • Hibernate关于父类子类的映射

    怕忘记,把栗子贴上来

    以Person类和Student类为例

    public class Person
    {
        private Integer id;
        private String name;
        private int age;
            //省略setter、getter代码
    }
    public class Student extends Person
    {
        private String school;
       //省略setter、getter代码
    }

    第一种方式:只有一张表的

    直接贴映射文件内容

    <hibernate-mapping package="com.zcd.exercise.subclass">
        <class name="Person" table="PERSONS" discriminator-value="PERSON">
        
            <id name="id" type="java.lang.Integer">
                <column name="ID" />
                <generator class="native" />
            </id>
            
            <discriminator type="string">
                <column name="TYPE"></column>
            </discriminator>
            
            <property name="name" type="java.lang.String">
                <column name="NAME" />
            </property>
            
            <property name="age" type="int">
                <column name="AGE" />
            </property>
            
            <subclass name="Student" discriminator-value="STUDENT">
                <property name="school" type="string" column="SCHOOL"></property>
            </subclass>
            
        </class>
    </hibernate-mapping>

    第二种方式:分两张表存储

    <hibernate-mapping package="com.zcd.exercise.unionSubclass">
        <class name="Person" table="PERSONS">
        
            <id name="id" type="java.lang.Integer">
                <column name="ID" />
                <generator class="hilo" />
            </id>
            
            <property name="name" type="java.lang.String">
                <column name="NAME" />
            </property>
            
            <property name="age" type="int">
                <column name="AGE" />
            </property>
            
            <union-subclass name="Student" table="STUDENTS">
                <property name="school" type="string">
                    <column name="SCHOOL"></column>
                </property>
            </union-subclass>
             
        </class>
    </hibernate-mapping>

     第三种方式:也是分两张表但是会把子类特有的属性单独存放在一张表,也就是相当于把一条记录拆开放在两张表中。

    <hibernate-mapping package="com.zcd.exercise.joinedSubclass">
        <class name="Person" table="PERSONS">
        
            <id name="id" type="java.lang.Integer">
                <column name="ID" />
                <generator class="native" />
            </id>
            
            <property name="name" type="java.lang.String">
                <column name="NAME" />
            </property>
            
            <property name="age" type="int">
                <column name="AGE" />
            </property>
            
            <joined-subclass name="Student" table="STUDENTS">
                <key column="STUDENT_ID"></key>
                <property name="school" type="string" column="SCHOOL"></property>
            </joined-subclass>
             
        </class>
    </hibernate-mapping>
  • 相关阅读:
    【问题解决方案】计算机中缺少vcruntime140d.dll
    【学习总结】SQL的学习-1-初识数据库与sql
    【学习总结】SQL的学习-汇总
    【刷题】面筋-测开-软件测试与软件开发的对比
    【刷题】面筋-测开-软件测试岗位的理解+职业规划
    【刷题】面筋-测开-软件测试概述/对测试的理解
    【刷题】面筋-网络-HTTP中get和post对比
    【刷题】面筋-网络-HTTP的请求类型和状态码
    【学习总结】HTTP的几种请求类型和状态码解释
    【刷题】面筋-测开-微波炉测试用例
  • 原文地址:https://www.cnblogs.com/GooPolaris/p/7920024.html
Copyright © 2011-2022 走看看