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>
  • 相关阅读:
    html抽取文本信息-java版(适合lucene建立索引)
    【LeetCode with Python】 Sort List
    POJ 2533 Longest Ordered Subsequence(dp LIS)
    Activity 之间 传递 List 封装的对象或者对象
    mongo数据库--非关系型数据库
    cocos2d-x的声音控制
    CSDN博客积分规则
    怎样使用递归实现归并排序
    android中9-patch图片的使用
    Cocos2d-x-3.0环境搭建
  • 原文地址:https://www.cnblogs.com/GooPolaris/p/7920024.html
Copyright © 2011-2022 走看看