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
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
国产精品美女久久久免费
|
中文字幕无码精品亚洲资源网
|
亚洲人妖女同在线播放
|
2019中文字幕免费电影在线播放
|
久久精品a亚洲国产v高清不卡
|
亚洲免费福利视频
|
亚洲AV电影天堂男人的天堂
|
青青草国产免费久久久91
|
色老头综合免费视频
|
亚洲欧洲日产国码久在线观看
|
4虎永免费最新永久免费地址
|
亚洲国产精品无码久久九九大片
|
亚洲日韩在线第一页
|
91精品免费观看
|
激情吃奶吻胸免费视频xxxx
|
中文字幕专区在线亚洲
|
亚洲免费视频观看
|
有码人妻在线免费看片
|
亚洲国产一区二区三区青草影视
|
成人免费视频网址
|
免费人成黄页在线观看日本
|
亚洲成A∨人片在线观看无码
|
免费理论片51人人看电影
|
97在线免费视频
|
在线视频亚洲一区
|
亚洲国产精品成人精品软件
|
免费看香港一级毛片
|
免费视频一区二区
|
一级视频在线免费观看
|
2019亚洲午夜无码天堂
|
久久国产亚洲精品麻豆
|
免费无码又爽又高潮视频
|
亚洲精品免费视频
|
欧洲精品码一区二区三区免费看
|
最新猫咪www免费人成
|
午夜精品射精入后重之免费观看
|
97碰公开在线观看免费视频
|
a色毛片免费视频
|
最新仑乱免费视频
|
污污视频免费观看网站
|
亚洲伊人久久大香线蕉啊
|