Kira-2006
-僅僅是一陣風也罷了,偏偏是這樣永恒, 僅僅是一場夢也罷了,偏偏是如此的真實,
BlogJava
首頁
新隨筆
新文章
聯系
聚合
管理
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)
中國通信建設集團設計院有限公司第三分公司
中國通信建設集團設計院有限公司第三分公司
搜索
最新評論
1.?re: Hibernate---SQL中datetime的映射[未登錄]
aaa
--s
2.?re: hsqldb編寫批處理文件啟動自己創建的數據庫
評論內容較長,點擊標題查看
--懸殊
3.?re: Hibernate---SQL中datetime的映射
type="timestamp"
--cwjcsu@126.com
4.?re: myeclipse自帶Struts缺少jar文件,datasource配置
@隔葉黃鶯
容器的數據源是什么意思呀?如果在struts1.3中手工加入數據源,會出錯嗎?
--tayoto
5.?re: myeclipse自帶Struts缺少jar文件,datasource配置
Struts 不建議在 struts-config.xml 中配置數據源,用容器的數據源吧。
所以 Struts1.3開始廢除了在struts-config.xml中配置數據源。
--隔葉黃鶯
閱讀排行榜
1.?Hibernate---SQL中datetime的映射(2754)
2.?myeclipse自帶Struts缺少jar文件,datasource配置(1262)
3.?一個計算機系學生的困惑?(344)
評論排行榜
1.?Hibernate---SQL中datetime的映射(2)
2.?myeclipse自帶Struts缺少jar文件,datasource配置(2)
3.?一個計算機系學生的困惑?(2)
深入淺出Hibernate學習筆記--數據關聯
一對一關聯
主鍵關聯:
即兩張表通過主鍵形成一對一映射關系。
用戶TUser與護照TPassport關聯
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"表示級聯關系設置為“all”,即無論主空房執行任何操作,都會關聯類執行相同的操作。
TPassport.hbm.xml
<
hibernate-mapping
>
<
class
name
="
TPassport"
table
="T_Passport"
>
<
one-to-one
name
="user"
class
="
TUser"
constrain
="true"
>
.
</
class
>
</
hibernate-mapping
>
constrain必須設定為“true”,以告知Hibernate當前主鍵上存在一個約束。
測試代碼:
TUser user
=
new
TUser();
user.setAge(
new
Integer(
20
));
user.setName(
"
Carin
"
);
TPassport passport
=
new
TPassport();
passport.setSerial(
"
PCN759386
"
);
passport.setExpiry(
new
Integer(
20080101
));
//
相互設置關聯
passport.setUser(user);
user.setPassport(passport);
Transaction tx
=
sessioin.beginTransaction();
//
由于TUser類的one-to-one節點被設置成
//
cascade=“all”其關聯的passport對象將被級聯保存
session.save(user);
tx.commit();
以下代碼完成關聯對象的讀取:
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表及其關聯的T_Passport表同時讀入,因為此時將out-join=“true”。若設置為false,則會分開讀取兩個表。
一對多關聯
用戶TUser和地址TAddress的一對多關聯。
單向一對多關聯
主控方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負責讀取,之后存放在主控方TUser指定的Collection類型屬性中。
單向一對多的實現比較簡單,但是存在一個問題,由于是單向關聯,為了保持關聯關系,我們只能通過主控方對被動方進行級聯更新。如果被關聯方的關聯字段為“NOT NULL”,當Hibernate創建或者更新時,可能出現約束違例。
雙向多對一關聯
實際上是“一對多”與“多對一”關聯的組合。也就是說我們必須在主控方配置一對多關系的基礎上,在被控方配置與其對應的多對一關聯。
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不在作為主控方,而是將關聯關系的維護工作交給關聯對象TAddress來做。
在one-to-many關系中,將many一方設置為主控方(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
>
多對多關聯
需要借助中間表來完成多對多映射信息的保存。
由于多對多關聯的性能不佳(由于引入了中間表,一次讀取操作需要反復多次查詢),因此在設計中應該避免大量使用。同時,在多對多關系中,應根據情況,采取延遲加載機制來避免無謂的性能開銷。
TGroup與TRole的多對多關聯:
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之間的映射關系。
cascade=“save-update”,對于多對多邏輯而言,很少出現刪除一方需要級聯刪除所有關聯數據的情況,如刪除一個group,一般不會刪除其中包含的Role。
column=“group_id”映射表中對于t_group表記錄的標識字段。
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
>
多對多關系中,由于關聯關系是兩張表相互引用,因此在保存關聯狀態時必須對雙方同時保存。
posted on 2008-05-10 20:08
Kira-2006
閱讀(549)
評論(0)
編輯
收藏
所屬分類:
hibernate
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
深入淺出Hibernate讀書筆記--Hibernate常見優化策略
深入淺出Hibernate學習筆記--Criteria Query
深入淺出Hibernate學習筆記--數據關聯
深入淺出Hibernate筆記--1.2.1持久化設計與解耦
Hibernate生成器
Copyright ©2025 Kira-2006 Powered By
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
成年在线网站免费观看无广告
|
久久久久久国产精品免费免费男同
|
免费看一级一级人妻片
|
国产成人精品日本亚洲11
|
黄色免费网站在线看
|
久久免费国产精品一区二区
|
在线a毛片免费视频观看
|
亚洲精品无码专区在线在线播放
|
国产精品亚洲片夜色在线
|
一二三区免费视频
|
成人免费午夜无码视频
|
亚洲日韩欧洲乱码AV夜夜摸
|
亚洲日本VA午夜在线电影
|
一区二区在线免费观看
|
亚洲欧洲久久av
|
亚洲老熟女五十路老熟女bbw
|
久久精品一本到99热免费
|
亚洲精品综合久久
|
亚洲AV色欲色欲WWW
|
午夜国产精品免费观看
|
久久久久亚洲精品无码系列
|
免费在线人人电影网
|
最新中文字幕电影免费观看
|
亚洲欧洲一区二区
|
国产精品内射视频免费
|
国产精品酒店视频免费看
|
最新亚洲春色Av无码专区
|
精品无码AV无码免费专区
|
视频免费1区二区三区
|
成人免费男女视频网站慢动作
|
亚洲理论片在线中文字幕
|
无码av免费一区二区三区试看
|
亚洲欧洲中文日韩久久AV乱码
|
美女羞羞免费视频网站
|
国产大片线上免费看
|
国产精品亚洲五月天高清
|
四虎影视免费永久在线观看
|
成人无遮挡毛片免费看
|
亚洲中文字幕久久精品无码A
|
青苹果乐园免费高清在线
|
亚洲精品国产日韩
|