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
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
中文字幕亚洲乱码熟女一区二区
|
亚洲图片校园春色
|
日本免费污片中国特一级
|
国产精品亚洲美女久久久
|
国产成人高清亚洲一区久久
|
免费看美女让人桶尿口
|
亚洲欧美黑人猛交群
|
日韩成全视频观看免费观看高清
|
亚洲一区二区三区深夜天堂
|
免费大片黄在线观看yw
|
亚洲娇小性xxxx
|
99久久免费精品国产72精品九九
|
亚洲国产成人精品激情
|
热久久精品免费视频
|
国产精品亚洲а∨无码播放不卡
|
婷婷亚洲天堂影院
|
999zyz**站免费毛片
|
日本久久久久亚洲中字幕
|
西西大胆无码视频免费
|
国产成人亚洲综合在线
|
亚洲中文字幕视频国产
|
99视频在线免费
|
亚洲www在线观看
|
全亚洲最新黄色特级网站
|
亚洲精品少妇30p
|
57pao国产成永久免费视频
|
亚洲精品无码久久
|
亚洲AV无码乱码在线观看
|
国产大片91精品免费看3
|
精品一区二区三区免费视频
|
久久99国产亚洲精品观看
|
台湾一级毛片永久免费
|
午夜亚洲乱码伦小说区69堂
|
亚洲国产精品无码久久一区二区
|
最近中文字幕mv免费高清视频8
|
亚洲精品无码专区在线播放
|
亚洲色欲久久久久综合网
|
8x8x华人永久免费视频
|
色欲色欲天天天www亚洲伊
|
亚洲国产精品无码久久一区二区
|
久久国内免费视频
|