Hibernate框架学习(七)——多对多关系
一、关系表达
1、表中的表达

2、实体中的表达

3、orm元数据中的表达
在User.hbm.xml中添加:

在Role.hbm.xml中添加(与上相反):

二、操作关联属性
1、保存员工及角色
public class Demo {
@Test
//保存员工以及角色
public void fun1(){
//1.获得session
Session session = HibernateUtils.openSession();
//2.开启事务
Transaction tx= session.beginTransaction();
//3.操作
//=================================
//1>创建两个User
User u1=new User();
u1.setUser_name("张三");
User u2=new User();
u2.setUser_name("苏牧");
//2>创建两个Role
Role r1=new Role();
r1.setRole_name("总裁");
Role r2=new Role();
r2.setRole_name("保安");
//3>用户表达关系
u1.getRoles().add(r1);
u1.getRoles().add(r2);
u2.getRoles().add(r1);
u2.getRoles().add(r2);
//4>角色表达关系
r1.getUsers().add(u1);
r1.getUsers().add(u2);
r2.getUsers().add(u1);
r2.getUsers().add(u2);
//5>调用Save方法一次保存
session.save(u1);
session.save(u2);
session.save(r1);
session.save(r2);
//=================================
//4.提交事务
tx.commit();
//5.关闭资源
session.close();
}
}
直接执行会报错,因为在多对多关系中,一定要选择一方放弃维护关系!(可以选择去掉角色表达关系的四行代码)
2、为张三新增角色(只需要修改步骤三操作里面的内容)
//1>获得张三用户
User user = session.get(User.class, 1l);
//2>创建角色-公关
Role r=new Role();
r.setRole_name("公关");
//3>将角色添加到用户中
user.getRoles().add(r);
//4>将角色转换为持久化
session.save(r);
3、为张三解除一个角色(也只需要修改步骤三操作里面的内容)
//1>获得张三用户
User user = session.get(User.class, 1l);
//2>获得要操作的角色对象(保安)
Role r=session.get(Role.class, 2l);
//3>将角色从用户的角色集合中移除
user.getRoles().remove(r);
三、进阶操作
1、inverse属性
基于上述操作1保存操作,如果不去掉任何代码,在配置文件Role.hbm.xml中添加inverse属性,并设置为true,同样也能完成操作。

2、级联属性
基于上述操作2新增操作,可以选择去掉最后的save操作,在配置文件User.hbm.xml中使用cascade属性,保存用户时同时保存相应角色。

Hibernate框架学习(七)——多对多关系的更多相关文章
- Hibernate框架学习之注解配置关系映射
上篇文章我们通过注解对映射了单个实体类,但是具体项目中往往实体类之间又是相互关联的,本篇文章就是从实体类之间存在的不同关联角度,具体学习下如何映射他们之间的关联,主要涉及内容如下: 单向的一 ...
- Hibernate框架之双向多对多关系映射
昨天跟大家分享了Hibernate中单向的一对多.单向多对一.双向一对多的映射关系,今天跟大家分享下在Hibernate中双向的多对多的映射关系 这次我们以项目和员工举个栗子,因为大家可以想象得到,在 ...
- hibernate框架学习笔记9:多对多关系案例
员工与角色案例: 一个员工可以是多种角色(总监,经理),一种角色可以是多个员工(保洁) 这里发现无法使用外键表达关系,多对多总是创建第三张表来维护关系 这张表至少两列,都是外键,分别引用两张表的主键 ...
- hibernate学习(5)——多对多关系映射
1.创建实体和映射 package com.alice.hibernate03.vo; import java.util.HashSet; import java.util.Set; public c ...
- hibernate框架学习笔记8:一对多关系案例
两个实体类:客户与联系人,一个客户可以有多个联系人 客户类: package domain; import java.util.HashSet; import java.util.Set; //客户实 ...
- SSH:Hibernate框架(七种关联关系映射及配置详解)
概念 基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用. 分类 关联关系分为上述七种,但是由于相互之间有各种关系, ...
- [ 学习笔记 ] Hibernate框架学习之一
一.JavaEE开发三层结构和三大框架的对应关系: Struts2框架 -> 表现层 web层(MVC是表现层的设计模型) 业务层 service层 Hibernate框架 -> 持久层 ...
- [ SSH框架 ] Hibernate框架学习之三
一.表关系的分析 Hibernate框架实现了ORM的思想,将关系数据库中表的数据映射成对象,使开发人员把对数据库的操作转化为对对象的操作,Hibernate的关联关系映射主要包括多表的映射配置.数据 ...
- [ SSH框架 ] Hibernate框架学习之四(JPA)
一.JPA概述以及它和Hibernate之间的关系 1.1.Hibernate 概述 JPA Java Persistence API,是EJB3规范中负责对象持久化的应用程序编程接口(ORM接口), ...
随机推荐
- matplotlib简介-高质量图形输出
Matplotlib 是一个用来绘制二维图形的 Python 模块,它克隆了许多 Matlab 中的函数, 用以帮助 Python 用户轻松获得高质量(达到出版水平)的二维图形. 文章来源:http: ...
- (转)shiro权限框架详解02-权限理论介绍
http://blog.csdn.net/facekbook/article/details/54893042 权限管理解决方案 本文主要介绍权限管理的解决方法: 粗颗粒度和细颗粒度 基于url拦截 ...
- MongoDB 学习笔记(二):shell中执行增删查改
一.查 1.查询集合中所有文档:db.集合名.find(). 2.查询集合中第一个文档:db.集合名.findOne(). 3.指定查询条件:第一个参数就是指定查询条件 查询全部文档:db.集合名.f ...
- JS 马托货物
大马驮2石粮食,中马驮1石粮食,两头小马驮一石粮食,要用100匹马,驮100石粮食,该如何调配? <!DOCTYPE html> <html> <head> < ...
- Java Web中的mapper,service,controller,model
Java Web中的mapper,service,controller,model作用分别是:java web中mapper是对象持久化映射层,一般会继承ibatis或者mybatisservive是 ...
- 移动端使用rem时候动态设置html字体大小
!(function(doc, win) { var docEle = doc.documentElement, evt = "onorientationchange" in ...
- SpringMVC在对应绑定不同实体,但具有相同属性名的解决方案....
在springmvc中,可以对前台传递过来的参数进行与后台实体绑定(第二种方式相对较好). 比如: 前台页面: <form action="${pageContext.request. ...
- iwebshop 增删改查
<?php header("content-type:text/html;charset=utf-8"); class Test extends IController { ...
- Introduction to CMMI培训总结
6月3日到5日,用了3天时间,參加了cmmi-dev的简单介绍课程培训,參加培训真的比上班都要累非常多啊!每天早上9点到下午6点.中午吃饭加歇息总共1小时.晚上还有作业要做,每天睡觉都要到11点 ...
- spark transform系列__sortByKey
该函数主要功能:通过指定的排序规则与进行排序操作的分区个数,对当前的RDD中的数据集按KEY进行排序,并生成一个SHUFFLEdrdd的实例,这个过程会运行shuffle操作,在运行排序操作前,sor ...