apple0668
TDD,Agile,Scrum,Core Java,J2EE,Investment Blank
BlogJava
首頁
新隨筆
聚合
管理
隨筆-61 評論-159 文章-0 trackbacks-0
系統(tǒng)學(xué)習(xí)hibernate之八:多對多關(guān)聯(lián)映射(單向)
hibernate中多對多關(guān)聯(lián)映射(單向),中間需要加入一個表來維護這種多對多關(guān)聯(lián)關(guān)系。
例子:
具體映射方式:
<set name="roles" table="t_user_role">
<key column="userid"/>
<many-to-many class="com.bjsxt.hibernate.Role" column="roleid"/>
</set>
1、User的POJO類
1
import
java.util.Set;
2
3
public
class
User
{
4
5
private
int
id;
6
7
private
String name;
8
9
private
Set roles;
10
//
省略setter、getter方法
11
}
2、Role的POJO類
1
public
class
Role
{
2
3
private
int
id;
4
5
private
String name;
6
//
省略setter、getter方法
7
}
3、User的映射文件User.hbm.xml
1
<?
xml version="1.0"
?>
2
<!
DOCTYPE hibernate-mapping PUBLIC
3
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
4
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
5
<
hibernate-mapping
>
6
<
class
name
="org.apple.hibernate.User"
table
="t_user"
>
7
<
id
name
="id"
>
8
<
generator
class
="native"
/>
9
</
id
>
10
<
property
name
="name"
/>
11
<
set
name
="roles"
table
="t_user_role"
>
12
<
key
column
="userid"
/>
13
<
many-to-many
column
="roleid"
class
="org.apple.hibernate.Role"
/>
14
</
set
>
15
</
class
>
16
</
hibernate-mapping
>
4、Role的映射文件Role.hbm.xml
1
<?
xml version="1.0"
?>
2
<!
DOCTYPE hibernate-mapping PUBLIC
3
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
4
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
5
<
hibernate-mapping
>
6
<
class
name
="org.apple.hibernate.Role"
table
="t_role"
>
7
<
id
name
="id"
>
8
<
generator
class
="native"
/>
9
</
id
>
10
<
property
name
="name"
/>
11
</
class
>
12
</
hibernate-mapping
>
5、測試保存數(shù)據(jù)方法:
1
public
void
testSave()
2
{
3
Session session
=
null
;
4
try
{
5
session
=
HibernateUtil.getSession();
6
session.beginTransaction();
7
Role role1
=
new
Role();
8
role1.setName(
"
CEO
"
);
9
session.save(role1);
10
Role role2
=
new
Role();
11
role2.setName(
"
總經(jīng)理
"
);
12
session.save(role2);
13
Role role3
=
new
Role();
14
role3.setName(
"
項目經(jīng)理
"
);
15
session.save(role3);
16
User user1
=
new
User();
17
user1.setName(
"
張三
"
);
18
Set user1role
=
new
HashSet();
19
user1role.add(role1);
20
user1role.add(role2);
21
user1role.add(role3);
22
user1.setRoles(user1role);
23
24
User user2
=
new
User();
25
user2.setName(
"
李四
"
);
26
Set user2role
=
new
HashSet();
27
user2role.add(role1);
28
user2role.add(role2);
29
user2.setRoles(user2role);
30
session.save(user1);
31
session.save(user2);
32
session.beginTransaction().commit();
33
34
35
}
catch
(Exception e)
{
36
e.printStackTrace();
37
session.beginTransaction().rollback();
38
39
}
finally
{
40
session.close();
41
}
42
}
PS:由于t_user_role中的字段都是參照t_user中的id和t_role的id,因此不用調(diào)用session.save(role)方法。
數(shù)據(jù)庫表數(shù)據(jù):
mysql> select *from t_user_role;
+--------+--------+
| userid | roleid |
+--------+--------+
| 1 | 1 |
| 2 | 1 |
| 1 | 2 |
| 2 | 2 |
| 1 | 3 |
mysql> select *from t_user;
+----+------+
| id | name |
+----+------+
| 1 | 張三 |
| 2 | 李四 |
+----+------+
mysql> select *from t_role;
+----+----------+
| id | name |
+----+----------+
| 1 | CEO |
| 2 | 總經(jīng)理 |
| 3 | 項目經(jīng)理 |
+----+----------+
6、測試查詢方法:
1
public
void
testLoad1()
2
{
3
Session session
=
null
;
4
try
{
5
session
=
HibernateUtil.getSession();
6
session.beginTransaction();
7
8
session.beginTransaction().commit();
9
User user
=
(User)session.load(User.
class
,
1
);
10
System.out.println(
"
user.name=
"
+
user.getName());
11
for
(Iterator it
=
user.getRoles().iterator();it.hasNext();)
12
{
13
Role role
=
(Role)it.next();
14
System.out.println(
"
role.name=
"
+
role.getName());
15
}
16
17
18
}
catch
(Exception e)
{
19
e.printStackTrace();
20
session.beginTransaction().rollback();
21
22
}
finally
{
23
session.close();
24
}
25
}
26
查詢結(jié)果:
Hibernate: select user0_.id as id0_0_, user0_.name as name0_0_ from t_user user0_ where user0_.id=?
user.name=張三
Hibernate: select roles0_.userid as userid1_, roles0_.roleid as roleid1_, role1_.id as id2_0_, role1_.name as name2_0_ from t_user_role roles0_ left outer join t_role role1_ on roles0_.roleid=role1_.id where roles0_.userid=?
role.name=總經(jīng)理
role.name=項目經(jīng)理
role.name=CEO
PS:由于一個人可能有多個角色,要把一個人對應(yīng)的角色迭代出來。
-------------------------------------------------------------------------------------------------
PS:本博客文章,如果沒有注明是有“轉(zhuǎn)”字樣,屬于本人原創(chuàng)。如果需要轉(zhuǎn)載,務(wù)必
注明作者
和
文章的詳細出處地址
,否則不允許轉(zhuǎn)載,多謝合作!
posted on 2008-10-12 21:59
apple0668
閱讀(760)
評論(0)
編輯
收藏
所屬分類:
hibernate
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(guān)文章:
系統(tǒng)學(xué)習(xí)hibernate之十五:hibernate一級緩存
系統(tǒng)學(xué)習(xí)hibernate之十四:hibernate中HQL查詢語言(二)
系統(tǒng)學(xué)習(xí)hibernate之十三:hibernate中HQL查詢語言(一)
系統(tǒng)學(xué)習(xí)hibernate之十二:hibernate中悲觀鎖和樂觀鎖
系統(tǒng)學(xué)習(xí)hibernate之十一:set、list、map、array集合
系統(tǒng)學(xué)習(xí)hibernate之十:Component映射
系統(tǒng)學(xué)習(xí)hibernate之九:多對多關(guān)聯(lián)映射(雙向)
系統(tǒng)學(xué)習(xí)hibernate之八:多對多關(guān)聯(lián)映射(單向)
系統(tǒng)學(xué)習(xí)hibernate之七:一對多單向關(guān)聯(lián)
系統(tǒng)學(xué)習(xí)hibernate之六:一對一外鍵關(guān)聯(lián)映射雙向關(guān)聯(lián)
Email:
chensp1230@163.com
歡迎交流
框架是告訴人們不該去做什么,而不是告訴人們該去做什么;容器是告訴人們該去做什么,而不是告訴人們不該去做什么!
<
2008年10月
>
日
一
二
三
四
五
六
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
8
留言簿
(10)
給我留言
查看公開留言
查看私人留言
我參與的團隊
深圳Java俱樂部(0/0)
Netbeans 愛好者(0/0)
隨筆分類
(63)
Aglets(1)
drools(2)
eclipse(6)
groovy
hibernate(17)
java(7)
jboss
junit(3)
Log4(2)
MongoDB(1)
oracle(1)
spring(4)
struts2(8)
svn(1)
tomcat(4)
webwork(4)
web報表(1)
xml
心情港灣
集群(1)
隨筆檔案
(61)
2015年3月 (1)
2012年7月 (1)
2012年4月 (1)
2011年5月 (3)
2010年1月 (2)
2009年3月 (1)
2008年12月 (2)
2008年11月 (5)
2008年10月 (16)
2008年9月 (1)
2008年4月 (1)
2008年1月 (2)
2007年11月 (2)
2007年10月 (15)
2007年9月 (8)
友情鏈接
開源在線手冊
最新隨筆
1.?Ehcache集群方案
2.?MongoDB安裝手記
3.?任何人都可以重構(gòu)<轉(zhuǎn)載>
4.?JDK6中JWS自帶webservice應(yīng)用
5.?解決:Eclipse啟動tomcat 訪問不了 手動啟動可以訪問
6.?IntelliJ Idea10 常用快捷鍵
7.?Drools語法詳解<轉(zhuǎn)>
8.?eclipse3.4安裝drools插件手記
9.?Java日期時間運算
10.?java中使用功能強悍的正則表達式
搜索
最新評論
1.?re: Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記
非常感謝樓主分享,解決問題, Tomcat 7.0.59
--Gozs
2.?re: Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記[未登錄]
正解
--gao
3.?re: Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記
@123
已解決,謝謝提示myeclipse相關(guān)的有用信息~~
--sequoah
4.?re: Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記
贊 清空work文件夾就可以了
--維尼
5.?re: Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記
很好 問題解決了!
--兔兔
閱讀排行榜
1.?Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記(85541)
2.?系統(tǒng)學(xué)習(xí)hibernate之一:利用hibernate中的SchemaExport生成數(shù)據(jù)表(18641)
3.?eclipse的第一個struts2插件:Alveole Studio MVC Web Project An eclipse plugin for Struts 2(15692)
4.?Subversion之路---實現(xiàn)精細的目錄訪問權(quán)限控制<轉(zhuǎn)>(11309)
5.?IntelliJ Idea10 常用快捷鍵(9321)
評論排行榜
1.?Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記(62)
2.?eclipse的第一個struts2插件:Alveole Studio MVC Web Project An eclipse plugin for Struts 2(32)
3.?Tomcat啟動端口被占用異常處理(9)
4.?升級瑞星防火墻2008后,在myeclipse6.0中啟動tomcat遇到怪問題!(7)
5.?JDK6中JWS自帶webservice應(yīng)用(6)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 apple0668
主站蜘蛛池模板:
国产亚洲视频在线观看
|
亚洲精品亚洲人成在线播放
|
久久久久国色AV免费观看
|
亚洲av无码av制服另类专区
|
亚洲国产精品无码久久98
|
区三区激情福利综合中文字幕在线一区亚洲视频1
|
黄色免费在线网站
|
久久久久亚洲AV无码专区首
|
91福利视频免费观看
|
亚洲人成电影网站国产精品
|
亚洲AV无码一区二区大桥未久
|
永久免费在线观看视频
|
在线观看亚洲免费
|
久久精品国产亚洲AV大全
|
一个人免费日韩不卡视频
|
亚洲免费综合色在线视频
|
亚洲精品无码永久在线观看你懂的
|
免费观看又污又黄在线观看
|
国产一级高清视频免费看
|
无码人妻一区二区三区免费n鬼沢
|
亚洲精品无码mⅴ在线观看
|
久久精品国产亚洲av四虎
|
免费无码又爽又刺激高潮的视频
|
亚洲国产日韩综合久久精品
|
亚洲人成人无码网www电影首页
|
永久免费视频v片www
|
亚洲一区二区三区在线观看精品中文
|
久久国产乱子伦精品免费强
|
亚洲国产精品99久久久久久
|
久久精品夜色国产亚洲av
|
免费一级特黄特色大片在线
|
免费能直接在线观看黄的视频
|
一区二区视频在线免费观看
|
精品国产成人亚洲午夜福利
|
亚洲色婷婷一区二区三区
|
全部免费国产潢色一级
|
成人毛片免费观看视频在线
|
成年网站免费入口在线观看
|
国产色在线|亚洲
|
亚洲精品无码不卡
|
亚洲色大成网站WWW久久九九
|