一个子类一张表
并与主类(父类)共享主表
这种关系中,将父类单独映射到一张主表,而为子类分别单独设立一张子表,子表中只包含子类所扩展的属性,同时,子类和父类通过关系型数据库的外键关联
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="hibernate.belle.Animal" table="t_animal" >
<id name="id">
<generator class="native"></generator>
</id>
<joined-subclass name="hibernate.belle.Bird" table ="t_bird">
<key column="bid"></key>
<property name="height"></property>
</joined-subclass>
<joined-subclass name="hibernate.belle.Pig" table="t_pig">
<key column="pid"></key>
<property name="weight"></property>
</joined-subclass>
</class>
</hibernate-mapping>
单表继承。所有类共用一张
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="hibernate.belle.Animal" table="t_animal" >
<id name="id">
<generator class="native"></generator>
</id>
<discriminator type="string"></discriminator>
<property name="name"></property>
<subclass name="hibernate.belle.Bird" discriminator-value="P">
<property name="height"></property>
</subclass>
<subclass name="hibernate.belle.Pig" discriminator-value="B">
<property name="weight"></property>
</subclass>
</class>
</hibernate-mapping>
每个具体类一张表 和join-subclass的区别就是 这里的子表会加上参照主表的列 而join-subclass只是参照 不会加到自己的表里面
注意: 这里的id不能native 因为每个具体类一张表 很有可能pig和bird 的主键id相同 所以要用assigned 手动分配id
这里的父类 animal可以将abstract设为true 表示不生成这个抽象表
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="hibernate.belle.Animal" table="animal" abstract="true" >
<id name="id">
<generator class="assigned"></generator>
</id>
<property name="name"></property>
<union-subclass name="hibernate.belle.Bird" table ="t_bird">
<property name="height"></property>
</union-subclass>
<union-subclass name="hibernate.belle.Pig" table="t_pig">
<property name="weight"></property>
</union-subclass>
</class>
</hibernate-mapping>