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属性
这种解决方案是 增加两张数据表 父类和子类的数据各自放在对应的数据表中应当注意的是 子类对应的数据表中同样有字段对应着父类的属性
这使得子类的数据和父类对应的数据表不存在关联关系。