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属性

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

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

 posted on 2017-02-10 02:04  夏末秋萍  阅读(141)  评论(0编辑  收藏  举报