hibernate的繼承對映可以理解為持久化類之間的繼承關係。例如:人和學生之間的關係。學生繼承了人,可以認為學生是乙個特殊的人,如果對人進行查詢,學生的例項也將被得到。
hibernate支援以下三種繼承對映策略:
使用subclass進行對映:將域模型中的每乙個實體物件對映到乙個獨立的表中,也就是說不用在關係資料模型中考慮域模型中的繼承關係和多型
使用joined-subclass進行對映:對於繼承關係中的子類使用同乙個表,這就需要在資料庫表彙總增加額外的區分子類型別的字段
使用union-subclass進行對映:域模型中的每個類對映到乙個表,通過關聯式資料庫模型中的外來鍵來描述表之間的繼承關係,這也就相當於按照域模型的結構來建立資料庫中的表,並通過外來鍵來建立表之間的繼承關係。
下面分情況具體了解以上三種對映策略。採用person作為父類,student作為子類來詳細解釋以上三種策略實現。其中perosn(id, name, age), studnet(school)
採用subclass進行對映:
person.hbm.xml
1<?
xml version="1.0"
?>23
>45
<
package
="com.yl.hibernate.subclass"
>
6<
class
name
="person"
table
="persons"
discriminator-value
="person"
>
7<
id name
="id"
type
="j**a.lang.integer"
>
8<
column
name
="id"
/>
9<
generator
class
="native"
/>
10id
>
1112
13<
discriminator
column
="type"
type
="string"
>
discriminator
>
1415
<
property
name
="name"
type
="j**a.lang.string"
>
16<
column
name
="name"
/>
17property
>
18<
property
name
="age"
type
="int"
>
19<
column
name
="age"
/>
20property
>
2122
<
subclass
name
="student"
discriminator-value
="student"
>
23<
property
name
="school"
type
="string"
column
="school"
>
property
>
24subclass
>
25class
>
26>
採用joined-subclass進行對映
person.hbm.xml
1<?
xml version="1.0"
?>23
>45
<
package
="com.yl.hibernate.joined.subclass"
>
6<
class
name
="person"
table
="persons"
>
7<
id name
="id"
type
="j**a.lang.integer"
>
8<
column
name
="id"
/>
9<
generator
class
="native"
/>
10id
>
1112
<
property
name
="name"
type
="j**a.lang.string"
>
13<
column
name
="name"
/>
14property
>
15<
property
name
="age"
type
="int"
>
16<
column
name
="age"
/>
17property
>
1819
<
joined-subclass
name
="student"
table
="students"
>
20<
key
column
="student_id"
>
key>
21<
property
name
="school"
type
="string"
column
="school"
>
property
>
22joined-subclass
>
2324
class
>
25>
採用union-subclass進行對映
person.hbm.xml
1<?
xml version="1.0"
?>23
>45
<
package
="com.yl.hibernate.union.subclass"
>
6<
class
name
="person"
table
="persons"
>
7<
id name
="id"
type
="j**a.lang.integer"
>
8<
column
name
="id"
/>
9<
generator
class
="hilo"
/>
10id
>
1112
<
property
name
="name"
type
="j**a.lang.string"
>
13<
column
name
="name"
/>
14property
>
15<
property
name
="age"
type
="int"
>
16<
column
name
="age"
/>
17property
>
1819
<
union-subclass
name
="student"
table
="students"
>
20<
property
name
="school"
type
="string"
column
="school"
>
property
>
21union-subclass
>
2223
2425
class
>
26>
ssh學習 hibernate關係對映(4)
hibernate中自身之間的一對多與多對一的關聯關係 在一些實際的場景當中,通常會發現乙個表之間也會存在一對多與多對一的關聯關係。比如 同事之間,存在乙個老夥計帶著好幾個新學員等等。碰到這是不是也會覺得有點兒棘手啊?不過也不過如此而已。掌握了一般的雙向的一對多關聯關係也就不難了。可以吧通常的兩個物...
hibernate的對映之二 一對多雙向關聯
hibernate的一對多雙關聯 一對多關聯對映 在多的一端加入乙個外來鍵指向一的一端,它維護的關係是一指向多 hihernate一對多關聯對映 雙向dept emp 一對多雙向關聯對映 在一一端的集合上使用,在對方表中加入乙個外來鍵指向一一端 在多一端採用 注意 標籤指定的外來鍵字段必須和指定的外...
Hibernate關聯對映之延遲載入
什麼事延遲載入?當真正需要資料時才執行sql語句,其本意是減少不必要的效能開銷!之前提到過乙個延遲載入的例子 load 結果集不能為空 當真正去列印物件屬性時,sql語句才執行!hibernate的lazy屬性 lazy屬性 類級別 true 預設 false 一對多關聯級別 true 預設 ext...