用户(User)和角色(Role)是多对多的关系。
一个用户可以对应多个角色,一个角色也可以对应多个用户。
比如张三对应CEO,保洁2个角色,而保洁也可以对应张三,李四2个用户。
通常多对多关系,必须引出第3张表。
1.从User这一端开始配。
在User里面必须有一个集合set来存放角色,举例如下。
package com.bjpowernode.hibernate.domain; import java.util.Set; public class User { private int id; private String name; private Set roles; public Set getRoles() { return roles; } public void setRoles(Set roles) { this.roles = roles; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } }
那么配置如下:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.bjpowernode.hibernate.domain.User" table="t_user"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <set name="roles" table="t_user_role"> <key column="user_id"/> <many-to-many class="com.bjpowernode.hibernate.domain.Role" column="role_id"/> </set> </class> </hibernate-mapping>
说明:凡是碰到set,在配置文件中肯定用set标签,name就是指在User类中的集合名,在set还必须指定一个表名,这里就是指第3张表:t_user_role
然后下面配置一个外键,是和User相关的,这里起名叫user_id,
然后下面配置set集合里面放置的对象,即Role,而且也要给它起个列名role_id,放在第三张表里。
至此,单向的多对多配置完成。
--------------------------------------------------------------------------------------------------------------------
下面配置双向多对多的关系。
Role类中添加User的集合,代码如下:
package com.bjpowernode.hibernate.domain; import java.util.Set; public class Role { private int id; private String name; private Set users; public Set getUsers() { return users; } public void setUsers(Set users) { this.users = users; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } }
配置如下,和User的配置差不多:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.bjpowernode.hibernate.domain.Role" table="t_role"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <set name="users" table="t_user_role"> <key column="role_id"/> <many-to-many class="com.bjpowernode.hibernate.domain.User" column="user_id"/> </set> </class> </hibernate-mapping>
这样双向多对多就配置完成了。
在保存时,先保存谁都无所谓。
refurl:http://blog.csdn.net/yinghuayu1324117/article/details/6519331
相关推荐
Hibernate双向一对一关联映射(注解版)
NULL 博文链接:https://dreamzhong.iteye.com/blog/1200915
Hibernate配置详解,详细描述了Hibernate的配置文件,一对一 一对多,多对多的单双向配置详解。
一个完成了hibernate的注解和配置的简单案例;这是一个一对多【多对一】的案例,其实一对多的案例就可以解决项目中的大部分需求。因为多对多可以一般我们转化为两个多对一的案例;
一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) 8.2. 在...
该文档总结了hibernate各种关联模式,单向多对一,单向一对多,双向一对多,双向多对多,自身一对多关联,以及oracle,mysql的相关数据库连接配置,希望对您学习有帮助。
7.4.1. 一对多(one to many) / 多对一(many to one) 7.4.2. 一对一(one to one) 7.5. 使用连接表的双向关联(Bidirectional associations with join tables) 7.5.1. 一对多(one to many) /多对一( many ...
针对hibernate关系映射进行了一个总结,包含xml配置形式和@注解配置形式,one-to-many,one-to-noe,many-to-one,many-to-many等单方向的配置和双方都配置的事例
7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...
7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...
7.4.1. 一对多(one to many) / 多对一(many to one) 7.4.2. 一对一(one to one) 7.5. 使用连接表的双向关联(Bidirectional associations with join tables) 7.5.1. 一对多(one to many) /多对一( many ...
7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) 8.2. 在...
希望能对大家学习 Hibernate 提供帮助. 这是第二篇, 内容如下:Hibernate配置文件;jdbc.fetch_size;jdbc.batch_size; POJO 类和数据库的映射文件*.hbm.xml;主键生成策略generator;映射集合属性;延迟加载策略;映射...
15.3 映射双向多对多关联关系 15.3.1 关联两端使用元素 15.3.2 在inverse端使用元素 15.3.3 使用组件类集合 15.3.4 把多对多关联分解为两个一对多关联 15.4 小结 15.5 思考题 第16章 Hibernate的检索...
7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) 8.2. 在集合中出现的依赖对象 ...
7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...
8.5.1. 一对多(one to many) /多对一( many to one) 8.5.2. 一对一(one to one) 8.5.3. 多对多(many to many) 9. 组件(Component)映射 9.1. 依赖对象(Dependent objects) 9.2. 在集合中出现的依赖...
Hibernate双向关联配置用set与bag的总结
值集合和多对多关联(Collections of Values and Many-To-Many Associations) 6.4. 一对多关联(One-To-Many Associations) 6.5. 延迟初始化(延迟加载)(Lazy Initialization) 6.6. 集合排序(Sorted ...
NULL 博文链接:https://yinxiaoyong.iteye.com/blog/426752