Kira-2006
-僅僅是一陣風(fēng)也罷了,偏偏是這樣永恒, 僅僅是一場夢也罷了,偏偏是如此的真實(shí),
BlogJava
首頁
新隨筆
新文章
聯(lián)系
聚合
管理
posts - 4,comments - 7,trackbacks - 0
<
2025年5月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
常用鏈接
我的隨筆
我的文章
我的評論
我的參與
最新評論
留言簿
(2)
給我留言
查看公開留言
查看私人留言
隨筆檔案
(3)
2008年4月 (2)
2006年3月 (1)
文章分類
(8)
design pattern
hibernate(6)
hsql(2)
java
文章檔案
(10)
2008年5月 (4)
2008年4月 (4)
2006年9月 (1)
2006年3月 (1)
中國通信建設(shè)集團(tuán)設(shè)計(jì)院有限公司第三分公司
中國通信建設(shè)集團(tuán)設(shè)計(jì)院有限公司第三分公司
搜索
最新評論
1.?re: Hibernate---SQL中datetime的映射[未登錄]
aaa
--s
2.?re: hsqldb編寫批處理文件啟動(dòng)自己創(chuàng)建的數(shù)據(jù)庫
評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--懸殊
3.?re: Hibernate---SQL中datetime的映射
type="timestamp"
--cwjcsu@126.com
4.?re: myeclipse自帶Struts缺少jar文件,datasource配置
@隔葉黃鶯
容器的數(shù)據(jù)源是什么意思呀?如果在struts1.3中手工加入數(shù)據(jù)源,會出錯(cuò)嗎?
--tayoto
5.?re: myeclipse自帶Struts缺少jar文件,datasource配置
Struts 不建議在 struts-config.xml 中配置數(shù)據(jù)源,用容器的數(shù)據(jù)源吧。
所以 Struts1.3開始廢除了在struts-config.xml中配置數(shù)據(jù)源。
--隔葉黃鶯
閱讀排行榜
1.?Hibernate---SQL中datetime的映射(2754)
2.?myeclipse自帶Struts缺少jar文件,datasource配置(1261)
3.?一個(gè)計(jì)算機(jī)系學(xué)生的困惑?(343)
評論排行榜
1.?Hibernate---SQL中datetime的映射(2)
2.?myeclipse自帶Struts缺少jar文件,datasource配置(2)
3.?一個(gè)計(jì)算機(jī)系學(xué)生的困惑?(2)
深入淺出Hibernate學(xué)習(xí)筆記--數(shù)據(jù)關(guān)聯(lián)
一對一關(guān)聯(lián)
主鍵關(guān)聯(lián):
即兩張表通過主鍵形成一對一映射關(guān)系。
用戶TUser與護(hù)照TPassport關(guān)聯(lián)
TUer.hbm.xml
<
hibernate-mapping
>
<
class
name
="
TUser"
table
="T_User"
>
<
one-to-one
name
="passport"
class
="
TPassport"
cascade
="all"
outer-join
="true"
/>
</
class
>
</
hibernate-mapping
>
cascade="all"表示級聯(lián)關(guān)系設(shè)置為“all”,即無論主空房執(zhí)行任何操作,都會關(guān)聯(lián)類執(zhí)行相同的操作。
TPassport.hbm.xml
<
hibernate-mapping
>
<
class
name
="
TPassport"
table
="T_Passport"
>
<
one-to-one
name
="user"
class
="
TUser"
constrain
="true"
>
.
</
class
>
</
hibernate-mapping
>
constrain必須設(shè)定為“true”,以告知Hibernate當(dāng)前主鍵上存在一個(gè)約束。
測試代碼:
TUser user
=
new
TUser();
user.setAge(
new
Integer(
20
));
user.setName(
"
Carin
"
);
TPassport passport
=
new
TPassport();
passport.setSerial(
"
PCN759386
"
);
passport.setExpiry(
new
Integer(
20080101
));
//
相互設(shè)置關(guān)聯(lián)
passport.setUser(user);
user.setPassport(passport);
Transaction tx
=
sessioin.beginTransaction();
//
由于TUser類的one-to-one節(jié)點(diǎn)被設(shè)置成
//
cascade=“all”其關(guān)聯(lián)的passport對象將被級聯(lián)保存
session.save(user);
tx.commit();
以下代碼完成關(guān)聯(lián)對象的讀取:
TUser user
=
(TUser)Hibernate.load(TUser.
class
,
new
Integer(
15
));
System.out.println(
"
User name=>
"
+
user.getName());
System.out.println(
"
Passport Serial=>
"
+
user.getPassport().getSerial());
控制臺輸出:
Hibernate:select tuser0_.id as id1_,
from T_USER tuser0_
left outer join
T_PASSPORT tpassport1_ on tuser0_.id
=
tpassport1_.id
where tuser0_.id
=?
User name
=>
Carin
Passport Serial
=>
PCN759386
Hibernate通過left outer join將T_User表及其關(guān)聯(lián)的T_Passport表同時(shí)讀入,因?yàn)榇藭r(shí)將out-join=“true”。若設(shè)置為false,則會分開讀取兩個(gè)表。
一對多關(guān)聯(lián)
用戶TUser和地址TAddress的一對多關(guān)聯(lián)。
單向一對多關(guān)聯(lián)
主控方TUser的映射配置:
<
hibernate-mapping
>
<
class
name
="
TUser"
table
="t_user"
dynamic-update
="true"
dynamic-insert
="true"
>
.
<
set
name
="address"
table
="t_address"
cascade
="all"
order-by
="zipcode asc"
>
<
key
column
="user_id"
/>
<
one-to-many
class
="
TAddress"
>
</
set
>
</
class
>
</
hibernate
>
被動(dòng)方TAddress的記錄由Hibernate負(fù)責(zé)讀取,之后存放在主控方TUser指定的Collection類型屬性中。
單向一對多的實(shí)現(xiàn)比較簡單,但是存在一個(gè)問題,由于是單向關(guān)聯(lián),為了保持關(guān)聯(lián)關(guān)系,我們只能通過主控方對被動(dòng)方進(jìn)行級聯(lián)更新。如果被關(guān)聯(lián)方的關(guān)聯(lián)字段為“NOT NULL”,當(dāng)Hibernate創(chuàng)建或者更新時(shí),可能出現(xiàn)約束違例。
雙向多對一關(guān)聯(lián)
實(shí)際上是“一對多”與“多對一”關(guān)聯(lián)的組合。也就是說我們必須在主控方配置一對多關(guān)系的基礎(chǔ)上,在被控方配置與其對應(yīng)的多對一關(guān)聯(lián)。
TUser.hbm.xml
<
hibernate-mapping
>
<
class
name
="
TUser"
table
="t_user"
dynamic-update
="true"
dynamic-insert
="true"
>
.
<
set
name
="address"
table
="t_address"
lazy
="false"
inverse
="true"
cascade
="all"
sort
="unsorted"
order-by
="zipcode asc"
>
<
key
column
="user_id"
/>
<
one-to-many
class
="
TAddress"
/>
</
set
>
.
</
class
>
</
hibernate
>
inverse="true",TUser不在作為主控方,而是將關(guān)聯(lián)關(guān)系的維護(hù)工作交給關(guān)聯(lián)對象TAddress來做。
在one-to-many關(guān)系中,將many一方設(shè)置為主控方(inverse=“true”)將有助于性能的改善。
TAddress.hbm.xml
<
hibernat-mapping
>
<
class
name
="
TAddress"
table
="t_address"
dynamic-update
="false"
dynamic-insert
="false"
>
.
<
many-to-one
name
="user"
class
="TUser"
cascade
="none"
outer-join
="auto"
update
="true"
insert
="true"
access
="property"
column
="user_id"
not-null
="true"
/>
.
</
class
>
</
hibernate-mapping
>
多對多關(guān)聯(lián)
需要借助中間表來完成多對多映射信息的保存。
由于多對多關(guān)聯(lián)的性能不佳(由于引入了中間表,一次讀取操作需要反復(fù)多次查詢),因此在設(shè)計(jì)中應(yīng)該避免大量使用。同時(shí),在多對多關(guān)系中,應(yīng)根據(jù)情況,采取延遲加載機(jī)制來避免無謂的性能開銷。
TGroup與TRole的多對多關(guān)聯(lián):
TGroup.hbm.xml:
<
hibernate-mapping
>
<
class
name
="
TGroup"
table
="t_group"
dynamic-update
="false"
dynamic-insert
="false"
>
.
<
set
name
="roles"
table
="t_group_role"
lazy
="false"
inverse
="false"
cascade
="save-update"
>
<
key
column
="group_id"
/>
<
many-to-many
class
="
TRole"
column
="role_id"
/>
</
set
>
.
</
class
>
</
hibernate
>
t_group_role為t_group與t_role之間的映射表,它保存了group和role之間的映射關(guān)系。
cascade=“save-update”,對于多對多邏輯而言,很少出現(xiàn)刪除一方需要級聯(lián)刪除所有關(guān)聯(lián)數(shù)據(jù)的情況,如刪除一個(gè)group,一般不會刪除其中包含的Role。
column=“group_id”映射表中對于t_group表記錄的標(biāo)識字段。
TRole.hbm.xml:
<
hibernate-mapping
>
<
class
name
="
TRole"
table
="t_role"
dynamic-update
="false"
dynamic-insert
="false"
>
.
<
set
name
="groups"
table
="t_group_role"
lazy
="false"
inverse
="true"
cascade
="save-update"
sort
="unsorted"
>
<
key
column
="role_id"
/>
<
many-to-many
class
="
TGroup"
column
="group_id"
outer-join
="auto"
/>
</
set
>
.
</
class
>
</
hibernate
>
多對多關(guān)系中,由于關(guān)聯(lián)關(guān)系是兩張表相互引用,因此在保存關(guān)聯(lián)狀態(tài)時(shí)必須對雙方同時(shí)保存。
posted on 2008-05-10 20:08
Kira-2006
閱讀(549)
評論(0)
編輯
收藏
所屬分類:
hibernate
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(guān)文章:
深入淺出Hibernate讀書筆記--Hibernate常見優(yōu)化策略
深入淺出Hibernate學(xué)習(xí)筆記--Criteria Query
深入淺出Hibernate學(xué)習(xí)筆記--數(shù)據(jù)關(guān)聯(lián)
深入淺出Hibernate筆記--1.2.1持久化設(shè)計(jì)與解耦
Hibernate生成器
Copyright ©2025 Kira-2006 Powered By
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
免费观看美女裸体网站
|
亚洲综合色自拍一区
|
十八禁视频在线观看免费无码无遮挡骂过
|
亚洲人成网亚洲欧洲无码
|
久久精品夜色国产亚洲av
|
亚洲毛片网址在线观看中文字幕
|
免费看国产精品3a黄的视频
|
麻豆精品成人免费国产片
|
九九九国产精品成人免费视频
|
亚洲色大18成人网站WWW在线播放
|
亚洲avav天堂av在线不卡
|
亚洲国产精品一区二区第一页免
|
欧洲精品免费一区二区三区
|
国产成人福利免费视频
|
久久精品私人影院免费看
|
国产一级婬片A视频免费观看
|
久久精品国产亚洲AV未满十八
|
最近最新的免费中文字幕
|
99精品视频免费观看
|
久久国产精品成人免费
|
美女巨胸喷奶水视频www免费
|
乱人伦中文视频在线观看免费
|
亚洲成a∧人片在线观看无码
|
在线aⅴ亚洲中文字幕
|
国产成人精品亚洲2020
|
亚洲欧洲另类春色校园小说
|
久久99亚洲网美利坚合众国
|
国产成人yy免费视频
|
最近2022中文字幕免费视频
|
久久国产乱子伦精品免费看
|
国产羞羞的视频在线观看免费
|
中文字幕免费不卡二区
|
久久福利青草精品资源站免费
|
国产精品免费一区二区三区四区
|
国产羞羞的视频在线观看免费
|
无码专区AAAAAA免费视频
|
精品一区二区三区无码免费视频
|
亚洲AV无码一区东京热
|
亚洲国产美女精品久久久久∴
|
国产亚洲美女精品久久久久狼
|
亚洲AV无码专区在线播放中文
|