Hibernate4 x之對映關係 繼承對映

2022-09-06 03:21:07 字數 4513 閱讀 7593

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...