apple0668
TDD,Agile,Scrum,Core Java,J2EE,Investment Blank
BlogJava
首页
新随笔
聚合
管理
随笔-61 评论-159 文章-0 trackbacks-0
系统学习hibernate之八:多对多关联映射(单向)
hibernate中多对多关联映射(单向),中间需要加入一个表来维护这种多对多关联关系。
例子:
具体映射方式:
<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、测试保存数据方法:
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(
"
总经理
"
);
12
session.save(role2);
13
Role role3
=
new
Role();
14
role3.setName(
"
项目经理
"
);
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,因此不用调用session.save(role)方法。
数据库表数据:
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 | 总经理 |
| 3 | 项目经理 |
+----+----------+
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
查询结果:
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=总经理
role.name=项目经理
role.name=CEO
PS:由于一个人可能有多个角色,要把一个人对应的角色迭代出来。
-------------------------------------------------------------------------------------------------
PS:本博客文章,如果没有注明是有“转”字样,属于本人原创。如果需要转载,务必
注明作者
和
文章的详细出处地址
,否则不允许转载,多谢合作!
posted on 2008-10-12 21:59
apple0668
阅读(755)
评论(0)
编辑
收藏
所属分类:
hibernate
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
系统学习hibernate之十五:hibernate一级缓存
系统学习hibernate之十四:hibernate中HQL查询语言(二)
系统学习hibernate之十三:hibernate中HQL查询语言(一)
系统学习hibernate之十二:hibernate中悲观锁和乐观锁
系统学习hibernate之十一:set、list、map、array集合
系统学习hibernate之十:Component映射
系统学习hibernate之九:多对多关联映射(双向)
系统学习hibernate之八:多对多关联映射(单向)
系统学习hibernate之七:一对多单向关联
系统学习hibernate之六:一对一外键关联映射双向关联
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. 任何人都可以重构<转载>
4. JDK6中JWS自带webservice应用
5. 解决:Eclipse启动tomcat 访问不了 手动启动可以访问
6. IntelliJ Idea10 常用快捷键
7. Drools语法详解<转>
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相关的有用信息~~
--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解决手记(85498)
2. 系统学习hibernate之一:利用hibernate中的SchemaExport生成数据表(18630)
3. eclipse的第一个struts2插件:Alveole Studio MVC Web Project An eclipse plugin for Struts 2(15668)
4. Subversion之路---实现精细的目录访问权限控制<转>(11261)
5. IntelliJ Idea10 常用快捷键(9302)
评论排行榜
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应用(6)