Hibernate 关联映射 之 多对多 关联(一)
1、了解几个知识点:
一、一般的设计中,多对多关联映射,需要一个中间表
二、Hibernate会自动生成中间表
三、Hibernate使用many-to-many标签来表示多对多的关联
四、多对多的关联映射,在实体类中,跟一对多一样,也是用集合来表示的
2、示例代码(用户和角色之间的关系是多对多)
用户的示例代码:
- public class User {
- private int id;
- private String name;
- private String password;
- private Set<Role> roles;
- <hibernate-mapping>
- <class name="com.shangxuetang.User" table="t_user">
- <id name="id">
- <generator class="native"/>
- </id>
- <property name="name"></property>
- <property name="password"></property>
- <set name="roles" table="t_user_group">
- <key column="userId"></key>
- <many-to-many class="com.shangxuetang.Role" column="roleId"></many-to-many>
- </set>
- </class>
- </hibernate-mapping>
需要注意的是:映射文件中属性table是必须有的;many-to-many 中属性column是必须有的(中间映射表中,关联目标表的关联字段),class是必须有的(关联目标类)
- public class Role {
- private int id;
- private String name;
- private Set<User> users;
- <hibernate-mapping>
- <class name="com.shangxuetang.Role" table="t_role">
- <id name="id">
- <generator class="native"/>
- </id>
- <property name="name"></property>
- <set name="users" table="t_user_group">
- <key column="roleId"></key>
- <many-to-many class="com.shangxuetang.User" column="userId"></many-to-many>
- </set>
- </class>
- </hibernate-mapping>
测试示例代码:
- public void testManytoMany() {
- Session session = HibernateUtil.getSession();
- try {
- session.beginTransaction();
- User u1 = new User("zhangsan");
- session.save(u1);
- User u2 = new User("lisi");
- session.save(u2);
- Role r1 = new Role("管理员");
- session.save(r1);
- Role r2 = new Role("普通用户");
- session.save(r2);
- Role r3 = new Role("VIP用户");
- session.save(r3);
- u1.addRole(r1).addRole(r3);
- u2.addRole(r2);
- r1.addUser(u2);
- session.getTransaction().commit();
- }catch(Exception e) {
- e.printStackTrace();
- session.getTransaction().rollback();
- }finally {
- session.close();
- }
- }
Hibernate 关联映射 之 多对多 关联(一)相关推荐
- Hibernate 关联映射 之 多对多 关联(二) 之拆分
1.由问题引出一个多对多拆分成两个多对一 问题:Hibernate 关联映射 之 多对多 关联(一)中中间表只是一个存放用户和角色的表,并无其他作用,如果客户有其他的需求,该表就无法扩展. 2.问题解 ...
- 【Hibernate框架】关联映射(多对多关联映射)
按着我们的总结行进计划,接下来,就是有关于多对多映射的总结了. 我们来举个例子啊,很长时间以来,房价暴涨不落,但是还有很多人拥有很多套房产,假如说,一个富豪拥有九套房产,家里人么准去住哪一套,我们就以 ...
- 【Hibernate步步为营】--关联映射之多对一
上篇文章讨论了Hibernate的基本映射,一个实体类对应着一张表,在相应的Hibernate Mapping文件中使用<class>标签映射.并且实体类中的普通属性对应着表字段,使用&l ...
- (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射
http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...
- hibernate关联映射:多对一、一对一
配置对象关联关系 - 单向一对多关系 - 例如:班级与学生 Grade类中 public class Grade{private int gid;private String gname;privat ...
- mybatis一对多关联 创建_MyBatis多对多关联查询(级联查询)
其实,MyBatis 没有实现多对多级联,这是因为多对多级联可以通过两个一对多级联进行替换. 例如,一个订单可以有多种商品,一种商品可以对应多个订单,订单与商品就是多对多的级联关系,使用一个中间表(订 ...
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
在我们以前的数据库设计中,设计表就不是一件轻松的事情.多种事物之间往往都是有这样那样的关系的.那怎样设计表格,才能既将事情描述明白,又能使数据库设计的比较合理呢?那里我们提供了好多规范,好多约束来满足 ...
- Hibernate一对多单向关联和双向关联映射方法及其优缺点
一对多关联映射和多对一关联映射实现的基本原理都是一样的,既是在多的一端加入一个外键指向一的一端外键,而主要的区别就是维护端不同. 它们的区别在于维护的关系不同: 一对多关联映射是指在加载一的一端数据的 ...
- 【SSH系列】Hibernate映射 -- 一对多关联映射
映射原理 一对多关联映射和多对一关联映射的映射原理是一样一样的,所以说嘛,知识都是相通的,一通百通,为什么说一对多关联映射和多对一关联映射是一样的呢?因为她们都是在多的一端加入 ...
最新文章
- 用计算机计算教学反思,《用计算器计算》教学反思
- 201621123055《JAVA程序设计》第七周学习总结
- Mysql主主复制高可用解决方案
- (1)DBA查询:数据库
- java.lang中String=和equals()函数解析
- OAuth2.0(基于django2.1.2实现版本)
- linux IPv4报文处理浅析
- PPP协议的配置(以H3C模拟器为例)
- paip.提升用户体验---c++ qt 悬浮窗实现
- 程序员如何成为一名自由职业者?
- ckplayer网页播放器简易教程
- jQuery fadeOut() 方法
- 小程序码 踩坑记录(buffer转成图片显示问题)
- 捣鼓PlantUML(一、环境)
- 行癫:只有合作伙伴和客户成功,才是阿里云的成功
- 直播系统解决方案:直播平台如何开发搭建
- 开源三轴云台EVVGC(simple BGC)分析
- RGB颜色转换为16进制颜色
- jsp_servle(3)
- Conda环境无法激活
热门文章
- 【Linux 内核】进程管理 ( 进程相关系统调用源码分析 | fork() 源码 | vfork() 源码 | clone() 源码 | _do_fork() 源码 | do_fork() 源码 )
- 【数字信号处理】傅里叶变换性质 ( 傅里叶变换频移性质示例 | PCM 音频信号处理 | 使用 matlab 进行频移操作 )
- 【Groovy】自定义 Xml 生成器 BuilderSupport ( setParent 方法中设置父节点与子节点关系 )
- 【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 使用 MetaClass 进行方法拦截 | 对象上拦截方法 | 类上拦截方法 )
- 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexFile loadDexFile 函数 | 构造函数 | openDexFile 函数 )
- 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 linker 中的 dlopen 函数地址 并 通过 远程调用 执行该函数 )
- 【Android RTMP】NV21 图像旋转处理 ( 快速搭建 RTMP 服务器 Shell 脚本 | 创建 RTMP 服务器镜像 | 浏览器观看直播 | 前置 / 后置摄像头图像旋转效果展示 )
- 安卓网络类型设置的实现
- mybatis映射器${}和#{}的区别
- 几种典型的软件自动化测试框架