實體類關系如圖所示:

映射到數據庫中:
1.單獨一張表(鑒別器)。如圖

配置文件寫法:
<class name="Employee" table="employee"discriminator-value="0">
<id column="id" name="id">
<generator class="native" />
</id>
<discriminator column="type" type="int" />
<property name="name" />
<subclass name="Skiller" discriminator-value="1">
<property name="skill" />
</subclass>
<subclass name="Sales" discriminator-value="2">
<property name="sell" />
</subclass>
</class>
說明:discriminator :鑒別器,默認type是string。
subclass :子類
總結:這種形式查詢速度快,但數據庫表結構不合理,表中有很多空的字段值。特別是子類特有的屬性很多的時候。
2.父類和子類各映射一張表(內連接),如圖。

配置文件寫法:
<class name="Employee" table="employee">
<id column="id" name="id">
<generator class="native" />
</id>
<property name="name" />
<joined-subclass name="Skiller" table="skiller">
<key column="emp_id"/>
<property name="skill"/>
</joined-subclass>
<joined-subclass name="Sales" table="sales">
<key column="emp_id"/>
<property name="sell"/>
</joined-subclass>
</class>
總結:這種形式數據庫表結構合理,但增刪改查的速度都較慢,性能不好。
注意:查詢是最好注明子類類名(get(Sales.class , id) ),不要用多態查詢( get(Employee.class , id) ),不然性能會很差
3.鑒別器與內連接結合。
配置文件寫法:
<class name="Employee" table="employee"discriminator-value="0">
<id column="id" name="id">
<generator class="native" />
</id>
<discriminator column="type" type="int" />
<property name="name" />
<subclass name="Skiller" discriminator-value="1">
<property name="skill" />
</subclass>
<subclass name="Sales" discriminator-value="2">
<join table="sales">
<key column="emp_id"/>
<property name="sell" />
</join>
</subclass>
</class>
總結:這種形式一般是在Sales類特有的屬性很多,Skiller特有屬性少的時候用。
4.每個具體類映射一張獨立表。

配置文件寫法:
<!-- 父類:Employee,采用每個具體類一張表的方式(抽象類不對應表) -->
<class name="Employee" table="employee">
<id column="id" name="id">
<!-- 這時不能使用identity生成策略,因為要求整個繼承結構中所有的數據記錄的id不能重復。
因為下面是union-subclass -->
<generator class="hilo" />
</id>
<property name="name" />
<union-subclass name="Skiller" table="skiller">
<property name="skill" />
</union-subclass>
<union-subclass name="Sales" table="sales">
<property name="sell"/>
</union-subclass>
</class>
若父類為抽象類,則將父類Class配置(第一句)寫成:
<class name="Employee" table="employee" abstract="true">
總結:這種形式 增刪改 的速度都很好,但 查詢 時較慢。