這種映射方式只需為繼承關系樹的Employee根類創建一張表EMPLOYEES
如圖
所示
在EMPLOYEES表中不僅提供和Employee類的屬性對應的字段
還要提供和它的兩個子類的所有屬型對應的字段
此外
EMPLOYEES表中需要額外加入一個字符串類型的EMPLOYEE_TYPE字段
用於區分Employee的具體類型
圖 繼承關系樹的根類對應一個表 Company類和Employee類有相應的映射文件
而HourlyEmployee類和SalariedEmployee類沒有相應的映射文件
圖
顯示了持久化類
映射文件和數據庫表之間的對應關系
圖 持久化類映射文件和數據庫表之間的對應關系 創建映射文件 從Company類到Employee類是多態關聯
由於關系數據模型描述了Employee類和它的兩個子類的繼承關系
因此可以映射Company類的employees集合
例程
是Company
hbm
xml文件的代碼
該文件不僅映射了Company類的id和name屬性
還映射了它的employees集合
例程
Company
hbm
xml
<hibernate
mapping >
<class name=
mypack
Company
table=
COMPANIES
>
<id name=
id
type=
long
column=
ID
>
<generator class=
increment
/>
</id>
<property name=
name
type=
string
column=
NAME
/>
<set
name=
employees
inverse=
true
lazy=
true
>
<key column=
COMPANY_ID
/>
<one
to
many class=
mypack
Employee
/>
</set>
</class>
</hibernate
mapping>
Employee
hbm
xml文件用於把Employee類映射到EMPLOYEES表
在這個映射文件中
除了需要映射Employee類本身的屬性
還需要在元素中映射兩個子類的屬性
例程
是Employee
hbm
xml文件的代碼
例程
Employee
hbm
xml
<hibernate
mapping >
<class name=
mypack
Employee
table=
EMPLOYEES
>
<id name=
id
type=
long
column=
ID
>
<generator class=
increment
/>
</id>
<discriminator column=
EMPLOYEE_TYPE
type=
string
/>
<property name=
name
type=
string
column=
NAME
/>
<many
to
one
name=
company
column=
COMPANY_ID
class=
mypack
Company
/>
<subclass name=
mypack
HourlyEmployee
discriminator
value=
HE
>
<property name=
rate
column=
RATE
type=
double
/>
</subclass>
<subclass name=
mypack
SalariedEmployee
discriminator
value=
SE
>
<property name=
salary
column=
SALARY
type=
double
/>
</subclass>
</class>
</hibernate
mapping>
在Employee
hbm
xml文件中
元素指定EMPLOYEES表中用於區分Employee類型的字段為EMPLOYEE_TYPE
兩個元素用於映射HourlyEmployee類和SalariedEmployee類
元素的discriminator
value屬性指定EMPLOYEE_TYPE字段的取值
EMPLOYEES表中有以下記錄
educitycn/img_///jpg >
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28460.html