Kira-2006
-僅僅是一陣風(fēng)也罷了,偏偏是這樣永恒, 僅僅是一場夢也罷了,偏偏是如此的真實,
BlogJava
首頁
新隨筆
新文章
聯(lián)系
聚合
管理
posts - 4,comments - 7,trackbacks - 0
<
2025年7月
>
日
一
二
三
四
五
六
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
8
9
常用鏈接
我的隨筆
我的文章
我的評論
我的參與
最新評論
留言簿
(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è)計院有限公司第三分公司
中國通信建設(shè)集團(tuán)設(shè)計院有限公司第三分公司
搜索
最新評論
1.?re: Hibernate---SQL中datetime的映射[未登錄]
aaa
--s
2.?re: hsqldb編寫批處理文件啟動自己創(chuàng)建的數(shù)據(jù)庫
評論內(nèi)容較長,點擊標(biāo)題查看
--懸殊
3.?re: Hibernate---SQL中datetime的映射
type="timestamp"
--cwjcsu@126.com
4.?re: myeclipse自帶Struts缺少jar文件,datasource配置
@隔葉黃鶯
容器的數(shù)據(jù)源是什么意思呀?如果在struts1.3中手工加入數(shù)據(jù)源,會出錯嗎?
--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的映射(2759)
2.?myeclipse自帶Struts缺少jar文件,datasource配置(1269)
3.?一個計算機系學(xué)生的困惑?(346)
評論排行榜
1.?Hibernate---SQL中datetime的映射(2)
2.?myeclipse自帶Struts缺少jar文件,datasource配置(2)
3.?一個計算機系學(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)前主鍵上存在一個約束。
測試代碼:
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é)點被設(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表同時讀入,因為此時將out-join=“true”。若設(shè)置為false,則會分開讀取兩個表。
一對多關(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
>
被動方TAddress的記錄由Hibernate負(fù)責(zé)讀取,之后存放在主控方TUser指定的Collection類型屬性中。
單向一對多的實現(xiàn)比較簡單,但是存在一個問題,由于是單向關(guān)聯(lián),為了保持關(guān)聯(lián)關(guān)系,我們只能通過主控方對被動方進(jìn)行級聯(lián)更新。如果被關(guān)聯(lián)方的關(guān)聯(lián)字段為“NOT NULL”,當(dāng)Hibernate創(chuàng)建或者更新時,可能出現(xiàn)約束違例。
雙向多對一關(guān)聯(lián)
實際上是“一對多”與“多對一”關(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è)計中應(yīng)該避免大量使用。同時,在多對多關(guān)系中,應(yīng)根據(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ù)的情況,如刪除一個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)時必須對雙方同時保存。
posted on 2008-05-10 20:08
Kira-2006
閱讀(555)
評論(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è)計與解耦
Hibernate生成器
Copyright ©2025 Kira-2006 Powered By
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
亚洲国产成人99精品激情在线
|
国产亚洲AV夜间福利香蕉149
|
777亚洲精品乱码久久久久久
|
久久免费动漫品精老司机
|
亚洲AV无码精品色午夜在线观看
|
国产成人 亚洲欧洲
|
午夜时刻免费入口
|
97se亚洲国产综合自在线
|
久久不见久久见中文字幕免费
|
久久精品国产亚洲AV高清热
|
亚洲色大成网站www久久九
|
97在线线免费观看视频在线观看
|
无码毛片一区二区三区视频免费播放
|
国语成本人片免费av无码
|
亚洲资源最新版在线观看
|
一个人在线观看视频免费
|
亚洲中文字幕无码久久2020
|
成年美女黄网站色大免费视频
|
亚洲熟妇少妇任你躁在线观看
|
日本高清免费不卡在线
|
产传媒61国产免费
|
亚洲成AV人片天堂网无码
|
亚洲精品视频在线免费
|
亚洲日韩精品无码专区加勒比
|
尤物永久免费AV无码网站
|
一区二区视频在线免费观看
|
亚洲人成亚洲人成在线观看
|
57pao国产成永久免费视频
|
亚洲H在线播放在线观看H
|
国产在线不卡免费播放
|
好吊色永久免费视频大全
|
亚洲AV成人片色在线观看高潮
|
无码av免费毛片一区二区
|
亚洲av无一区二区三区
|
国产啪亚洲国产精品无码
|
97精品免费视频
|
亚洲GV天堂GV无码男同
|
日韩精品亚洲aⅴ在线影院
|
国产大片91精品免费观看不卡
|
日日摸日日碰夜夜爽亚洲
|
亚洲国产精品福利片在线观看
|