Hibernate詳解(2) 一對多對映分析

2021-08-26 21:55:40 字數 2936 閱讀 7401

在學習

hibernate

的時候,很大一部分任務量是配置實體對映關係,

hibernate

的對映關係的關鍵就是掌握物件導向的思想,搞清楚實體之間的關係。每乙個實體關係都對應這

uml中的物件關係。我們配置這些物件的關係模型。下面分節講述

hibernate

的關係對映。

本節主要講述

hibernate

的一和多的關係。之所以稱之為一和多的關係,是因為他包括三種關係:單向一對多,單向多對一,雙向一對多。我這裡統稱為它一對多。一對多關係是非常重要的關係,也是現實世界中最多的關係。這三個關係對應的是

uml中的關聯關係,也可以分成聚合和組合。

之所以把一對多分成三種型別,是因為它們站的角度不同。這裡就拿學生和班級的關係舉例,站在學生的角度看這個關係是多對一,站在班級的角度看是一對多。但是為了更好的使用這個關係,也考慮到實際操作的原因。一般把它們設定成雙向一對多。

單向多對一是站在多的角度去看關係的,在本例中就是站在學生的角度去看。首先看這個關係的

uml圖。

多個學生對應乙個班級。這裡的關係就是多對一的關係,站在學生的角度看。如果我們只是需要知道學生位於那個班級。這樣就只是單向的關係,也就是拿到

student,hi

bernate

會自動的給你抓取到對應的

classes

。單向的多對一是由需求產生的。是人為的設定的。這樣的關係中,

studnet

一端負責維護關係。它的對映原理是在

studnet

表的一段加入外來鍵,指向一的一端。

下面看這兩個實體對應的配置檔案

studen

t.hbm.xml

和classes.hbm.xml

<?xmlversion ="1.0"?>

關係在多的一端維護,就在多的一端配置。

<?xmlversion ="1.0"?>

同單向多一對的關係類似,單向一對多關係是同乙個實體模型對映的不同關係模型。它是站在班級的角度去看問題的。也就是一的這一端去維護關係。也就是在載入一的時候,

hibernate

會自動載入上多的一端資料。他的對映原理和單向一對多是一樣的,都是在多的一端加入乙個外來鍵,指向一的一端。它的

uml圖如下,注意箭頭的指向不同了。

對應的配置檔案

studen

t.hbm.xml

和classes.hbm.xml

如下:

<?xmlversion ="1.0"?>

一的一端維護關係

<?xmlversion ="1.0"?>

上面的兩種關係都是單向的,但是在實際應用中,我們往往需要雙向的載入。比如我拿到學生想知道他所在的班級,拿到班級想知道班裡面有的學生。這樣就需要雙向的關係。還有乙個很重要的原因就是,單向一對多關係在維護關係的過程中存在很大的缺陷。在插入學生的時候,如果班級不能為空,則學生是插入不了的。還有如果插入成功,在開始解決班級欄位是空的,在事務提交階段,班級需要更新每乙個學生的班級

id,這樣會產生大量的

update

語句。影響效率。所以一對多關係大多使用雙向一對多對映。

雙向一對多對映的

uml圖是這樣的。

它是乙個雙向的關聯(這裡僅限於對

hibernate

使用,和現實關係有不一致的地方)

雙向一對多的配置檔案

studen

t.hbm.xml

和classes.hbm.xml

如下:

<?xmlversion ="1.0"?>

<?xmlversion ="1.0"?>

它的對映原理是

也就是兩端都要配置,和上面的兩種有所不同。但是需要注意的是

通過many-to-one元素,可以定義一種常見的與另乙個持久化類的關聯。這種關係模型是多對一關聯(實際上是乙個物件引用-譯註):這個表的乙個外來鍵引用目標表的主鍵字段。

一對多關聯,定義乙個表的外來鍵到另乙個表的主鍵,另乙個是多的一端。

inverse的值有兩種,「true」和「false」。inverse="false"是預設的值,如果設定為true則表示物件的狀態變化不會同步到資料庫 ;設定成false則相反;

inverse的作用:在hibernate中是通過inverse的設定來決定是有誰來維護表和表之間的關係的。

1:hibernate

中的實體類和我們以前做的實體類不太一樣,主要是以前的實體類如果包含其它表的字段,直接加上乙個

string

或者int

型別的資料就行。而

hibernate

中需要加入的是乙個實體類屬性字段。但是兩者生成的表是一樣的。就像上面

uml圖體現的那樣,第乙個是

studnet

實體類中有乙個

classes

型別的字段,第二個是

classes

中有乙個

student

型別的集合。第三個是他們雙方都有對方的乙個引用。 2

:一對多關係是比較常用的關係,很多時候都會對映出雙向的一對多。 3

:學習h

ibernate

要認真體會裡面的實體關係,由此去推出對映關係。這裡面用到了很多

uml的知識。需要重點研究。

Hibernate一對多和多對一關係詳解

雙向一對多關係,一是關係維護端 owner side 多是關係被維護端 inverse side 在關係被維護端需要通過 joincolumn建立外來鍵列指向關係維護端的主鍵列。public classorderimplementsserializable public classorderitem...

Hibernate一對多 雙向

hibernate 雙向關聯就是有 一對多 和 多對一 兩個關聯組合而成德,在雙向關聯的兩端都知道對方是誰。下面就開始演示這種關聯。首先定義我們需要使用的pojo物件。public class member public class order 兩個pojo對應的對映檔案分別為member.hbm....

Hibernate一對多對映

一對多使用區縣和街道舉例 街道的實體 private integer jdid 街道的id private string jdname 街道名 private quxian quxian 屬於哪個區縣 區縣的實體 private integer qxid 區縣的id private string q...