1.模型
一个用户拥有多个角色,一个角色拥有多个用户。
2.实体类(省略set,get方法)

public class User { 
private int id; 
private String name; 
private Set roles; 
}
public class Role { 
private int id; 
private String name; 
private Set users; 
}

3.数据模型
mysql> desc t_user;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
mysql> desc t_role;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
4.映射文件
User.hbm.xml
<hibernate-mapping> 
<class name="com.bjsxt.hibernate.User" table="t_user"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<property name="name"/> 
<set name="roles" table="t_user_role"> 
<key column="userid"/> 
<many-to-many class="com.bjsxt.hibernate.Role" column="roleid"/> 
</set> 
</class> 
</hibernate-mapping> 
Role.hbm.xml
<hibernate-mapping> 
<class name="com.bjsxt.hibernate.Role" table="t_role"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<property name="name"/> 
<set name="users" table="t_user_role"> 
<key column="roleid"/> 
<many-to-many class="com.bjsxt.hibernate.User" column="userid"/> 
</set> 
</class> 
</hibernate-mapping> 
<key>中的column属性值必须等于单向关联中<many-to-many>标签指向的column的属性值
<many-to-many>中column属性值必须等于单向关联中<key>中column的属性值
5.测试
public class ManyToManyTest extends TestCase { 
//存储 
public void testSave(){ 
Session session = HibernateUtils.getSession(); 
Transaction tx = session.beginTransaction(); 
User user1 = new User(); 
user1.setName("yang9"); 
session.save(user1); 
User user2 = new User(); 
user2.setName("long1"); 
session.save(user2); 
Set<User> users = new HashSet<User>(); 
users.add(user1); 
users.add(user2); 
Role role1 = new Role(); 
role1.setName("凤山人在线"); 
role1.setUsers(users); 
session.save(role1); 
tx.commit(); 

//导入 
public void testLoad(){ 
Session session =HibernateUtils.getSession(); 
Transaction tx = session.beginTransaction(); 
Role role = (Role) session.load(Role.class, 1); 
System.out.println(role.getName()); 
for(Iterator ite=role.getUsers().iterator();ite.hasNext();){ 
User user = (User) ite.next(); 
System.out.println(user.getName()); 

}

附件:http://down.51cto.com/data/2351413

本文转自 yzzh9 51CTO博客,原文链接:http://blog.51cto.com/java999/119434,如需转载请自行联系原作者

多对多关联映射(双向关联)见项目:me_many_to_many相关推荐

  1. Hibernate一对多单向关联和双向关联映射方法及其优缺点

    一对多关联映射和多对一关联映射实现的基本原理都是一样的,既是在多的一端加入一个外键指向一的一端外键,而主要的区别就是维护端不同. 它们的区别在于维护的关系不同: 一对多关联映射是指在加载一的一端数据的 ...

  2. 多对多关联映射(双向)

    关联映射方面的最后一篇了,我觉得映射文件的编写是使用hibernate的基础,而关联映射又是基础的基础,所以这方面分的细一些,罗嗦一些,说明白就好,呵呵. 多对多关联(双向),相对单向,在实体上就是一 ...

  3. hibernate one2one 唯一外键关联(双向关联)

    hibernate的一对一唯一外键关联映射(双向关联 Person <------->IdCard) 一对一唯一外键关联采用<one - to -one>标签映射,必须指定标签 ...

  4. Hibernate 、多表关联映射-组件关联映射(component)

    组件关联映射可以将一些简小的数据与主题放在一个表中,例如firstName 和LastName这两个结合在一起可以组成一个名字,但是再分别将这两个再建一个表就不太合适了,这个时候可以用到组件关联映射: ...

  5. 【SSH系列】Hibernate映射 -- 一对多关联映射

         映射原理        一对多关联映射和多对一关联映射的映射原理是一样一样的,所以说嘛,知识都是相通的,一通百通,为什么说一对多关联映射和多对一关联映射是一样的呢?因为她们都是在多的一端加入 ...

  6. hibernate一对多关联映射

    一对多关联映射 映射原理 一对多关联映射和多对一关联映射的映射原理是一致的,都是在多的一端加入一个外键,指向一的一端.关联关系都是由多端维护,只是在写映射时发生了变化. 多对一和一对多的区别 多对一和 ...

  7. Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射

    在我们以前的数据库设计中,设计表就不是一件轻松的事情.多种事物之间往往都是有这样那样的关系的.那怎样设计表格,才能既将事情描述明白,又能使数据库设计的比较合理呢?那里我们提供了好多规范,好多约束来满足 ...

  8. Hibernate(九)一对多双向关联映射

    上次的博文Hibernate从入门到精通(八)一对多单向关联映射中,我们讲解了一下一对多单向映射的相关 内容,这次我们讲解一下一对多双向映射的相关内容. 一对多双向关联映射 一对多双向关联映 射,即在 ...

  9. 初识Hibernate之关联映射(一)

    上篇文章我们对持久化对象进行的学习,了解了它的三种不同的状态并通过它完成对数据库的映射操作.但这都是基于单张表的操作,如果两张或者两张以上的表之间存在某种关联,我们又该如何利用持久化对象进行操作呢?本 ...

  10. Java三大框架之——Hibernate关联映射与级联操作

    什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...

最新文章

  1. 【错误记录】集成 Tinker 热修复报错 ( No such property: variantConfiguration for class: .ApplicationVariantData )
  2. 一个人的渺小与微不足道。
  3. C++ 类中的static成员的初始化
  4. 创业三年来的一些感想 - 创业篇1
  5. 线性搜索或顺序搜索算法在Java中如何工作? 示例教程
  6. OpenXLSX 中文字段读取问题
  7. android流量显示插件,[android]仿360状态,种流量监控桌面浮动显示
  8. 中国抗生素骨水泥行业市场供需与战略研究报告
  9. 【OpenGL基础篇】——使用面向对象方法封装OpenGL函数(二)
  10. nupkg格式_nupkg文件怎么打开(package程序安装)
  11. Idea 2020 找不到或无法安装官方汉化包解决方案
  12. CAN波特率计算公式
  13. Android Studio连接MuMu模拟器
  14. java中的Environment类
  15. 【Google Chrome】打开本地html文件报错问题
  16. 2014网易游戏实习生面试体验
  17. Html设置表格撑开,CSS教程:表格不被撑开的解决办法
  18. ❤表白❤相册——动态3D图片墙
  19. Excel数据导入Matlab绘图
  20. opencv inrange函数

热门文章

  1. 内部控制检查和内部控制审计的区别
  2. 【转载】美国煤层气发展史
  3. VB shell执行程序,直到执行完毕
  4. 【引用】别让理想毁了人生
  5. 刚刚,Facebook开源了星际争霸AI代码
  6. 从此,激光雷达和摄像头,就是一个东西了?
  7. 蓦然认知戴帅湘:做新一代决策引擎,比DuerOs走得垂直纵深
  8. 谷歌再推AI开源平台AI·ON,你有机会参与Bengio的项目了
  9. dubbo-monitor-simple-2.5.3-assembly 简易监控中心安装
  10. Swift实践:使用CoreData存储多种数据类的通讯录