其每一種策略的具體區別如下:
1、放到一張表中
<hibernate-mapping>
<class name="com.tgb.hibernate.Animal" table="t_animal" lazy="false">
<id name="id">
<generator class="native" />
</id>
<discriminator column="type" type="string">
</discriminator>
<property name="name" />
<property name="sex" />
<subclass name="com.tgb.hibernate.Pig" discriminator-value="P">
<property name="weight" />
</subclass>
<subclass name="com.tgb.hibernate.Bird" discriminator-value="B">
<property name="height" />
</subclass>
</class>
</hibernate-mapping>
2、每個類一張表
<hibernate-mapping package="com.tgb.hibernate">
<class name="Animal" table="t_animal">
<id name="id">
<generator class="native" />
</id>
<property name="name" />
<property name="sex" />
<joined-subclass name="Pig" table="t_pig">
<key column="Pid" />
<property name="weight" />
</joined-subclass>
<joined-subclass name="Bird" table="t_bird">
<key column="Bid" />
<property name="height" />
</joined-subclass>
</class>
</hibernate-mapping>
3、每個具體類一張表
<hibernate-mapping package="com.tgb.hibernate">
<class name="Animal" table="t_animal" abstract="true">
<id name="id">
<generator class="assigned" />
</id>
<property name="name" />
<property name="sex" />
<union-subclass name="Pig" table="t_pig">
<property name="weight" />
</union-subclass>
<union-subclass name="Bird" table="t_bird">
<property name="height" />
</union-subclass>
</class>
</hibernate-mapping>