zoukankan      html  css  js  c++  java
  • hibernate 继承映射

    hibernate的继承映射可以理解为Java 类之间的继承关系,hibernate有三种解决方案

    一,subclass属性

       比如Student类 继承Person类,添加:

         在Person.hbm.xml文件中添加

         1,<subclass name="com.m01.subclass.Student" discriminator-value="student">
            <property name="school" type="java.lang.String">
              <column name="SCHOOL"></column>
            </property>
          </subclass>

          class: 子类的全类名; discriminator-value: 指定子类的默认值 [下面详解]

          name : 子类中添加的属性; column的name : 数据表中与之对应的字段名

           2,添加属性 : discriminator-value

          <class name="com.m01.subclass.Person" table="PERSON" discriminator-value="person">

          discriminator-value: 指定父类的默认值[下面详解]

         3, 添加: 

           <discriminator column="TYPE" type="string"></discriminator>

           column : 在数据表中添加的数据字段名

         这种解决方案是通过在数据表中添加一个指定字段来区分 父类和子类的数据,父类和子类的数据保存在同一张数据表中; discriminator-value

         属性指定了父类和子类在数据表的"区分字段"

         的默认值,比如说 父类的数据在在数据表中 对应的 "区分字段"的值为 "person"


    二,joined-subclass属性

       比如Dog类 继承Animal类

        在Animal.hbm.xml文件中添加

         <joined-subclass name="com.m01.joinedsubclass.Dog" table="DOG">
          <key column="DOGID"></key>
          <property name="type" type="java.lang.String" column="TYPES"/>
         </joined-subclass>

         name: 子类的全类型;   table: 子类对应的数据表名

         column: Dog表的主键 同时也是父类对应数据表的 外键

         name : 子类新增属性名

        这种解决方案是 增加两张数据表 父类和子类的数据各自放在对应的数据表中,但同时,子类还会将自己的数据通过外键关联到父类的数据表中。


    三,union-subclass属性

       比如Man类继承Human类

        在Human.hbm.xml文件中添加

         <union-subclass name="com.m01.unionsubclass.Man" table="MAN">
          <property name="sex" type="java.lang.String" column="SEX"/>
         </union-subclass>

         table:子类对应的数据表名; name : 子类增加的属性名; column: MAN表中的字段名对应着 子类的sex属性

        这种解决方案是 增加两张数据表 父类和子类的数据各自放在对应的数据表中应当注意的是 子类对应的数据表中同样有字段对应着父类的属性

        这使得子类的数据和父类对应的数据表不存在关联关系。

  • 相关阅读:
    108. Convert Sorted Array to Binary Search Tree
    How to check if one path is a child of another path?
    Why there is two completely different version of Reverse for List and IEnumerable?
    在Jenkins中集成Sonarqube
    如何查看sonarqube的版本 how to check the version of sonarqube
    Queue
    BFS广度优先 vs DFS深度优先 for Binary Tree
    Depth-first search and Breadth-first search 深度优先搜索和广度优先搜索
    102. Binary Tree Level Order Traversal 广度优先遍历
    How do I check if a type is a subtype OR the type of an object?
  • 原文地址:https://www.cnblogs.com/m01qiuping/p/6384802.html
Copyright © 2011-2022 走看看