1. 程式人生 > >Hibernate one-to-many / many-to-one關係對映

Hibernate one-to-many / many-to-one關係對映

Page:  <1|2> 現實生活中有很多1對多(多對1)的關係模型。比如,一個人可以有0到多套房子,0到多輛汽車;一個父親有0到多個孩子等等。這種關係被稱作1對多關係。反過來,房子與人,汽車與人的關係,以及孩子與父親的關係就是多對一的關係。這裡需要注意一點的是,多對一關係的一個前提是:一套確定的房子只能屬於某個確定的人(不能屬於多人);一個確定的孩子也只能屬於某個確定的父親。

下面我們就拿最簡單的父親和孩子的關係來說明1對多(多對1)模型在Hibernate中的對映。

關係模型:父親 vs 孩子(Father vs  Son)。
Hibernate中對應的關係對映:one-to-many

反過來,

關係模型:孩子 vs 父親(Son vs Father)。
Hibernate中對應的關係對映:many-to-one


很多初學者往往有這樣的疑問,我什麼時候需要定義對映關係呢?
答案很簡單:按需求來確定。就是說你需要哪種關係的時候就定義哪種對映,不需要的時候就可以不定義它們的關係映射了。還是以上面的例子來說明。
如果你需要在取得孩子(Son)的時候,同時需要知道該孩子的父親(Father)是誰,你就可以在孩子的對映定義檔案Son.hbm.xml裡定義孩子跟父親的關係對映:many-to-one。
同樣,如果需要知道某父親的所有孩子,就可以在父親的對映定義檔案Father.hbm.xml裡定義父親跟孩子的關係對映:one-to-many。

回到正題,怎麼定義呢?下面我們列出程式碼:

TABLE-CREATE SQL:
#
# father TABLE
#
CREATE TABLE FATHER (
ID CHAR(32) NOT NULL,
NAME CHAR(32) NOT NULL,
PRIMARY KEY(id)
)

#
# SON TABLE
#
CREATE TABLE SON (
ID CHAR(32) NOT NULL,
NAME CHAR(32) NOT NULL,
FATHER_ID CHAR(32) NOT NULL,
PRIMARY KEY(id)
)
# ALTER TABLE SON ADD FOREIGN KEY FATHER_ID REFERENCE FATHER(ID);