多对多manytomany
----------------------多对多manytomany
要点:
多对多必须有mappedBy,让一个端维护关系
多对多会创建一张关系表,维护关系就是维护第三张表。
所以增加关系,则在集合中添加实体。删除关系,则从集合中删除实体。 mappedBy使一方丧失关系维护 @Entity
public class User { @Id
@GeneratedValue
private long id; @Column(name="name")
private String name; @ManyToMany(mappedBy="users")
@Cascade(value=CascadeType.SAVE_UPDATE)
private Set<Role> roles = new HashSet<Role>();
} @Entity
public class Role {
@Id
@GeneratedValue
private long id;
@Column
private String name;
@ManyToMany
private Set<User> users = new HashSet<User>();
public String getName() {
return name;
} --------------------------------保存mappedBy端
User user = new User();
user.setName("zhangsan");
User user2 = new User();
user2.setName("lisi"); Role r1= new Role();
r1.setName("ADMIN");
Role r2= new Role();
r2.setName("EDITOR"); user.getRoles().add(r1);
user.getRoles().add(r2);
user2.getRoles().add(r1); r1.getUsers().add(user);
r1.getUsers().add(user2);
r2.getUsers().add(user); session.save(user);
session.save(user2); 结果:
进行了级联保存。
如果使用
CascadeType.PERSIST注解
@ManyToMany(cascade=CascadeType.PERSIST,mappedBy="users") 则需要调用session.persist方法进行保存。注意每个方法上都有支持的级联注解的说明!
Hibernate:
insert
into
User
(name, id)
values
(?, ?)
Hibernate:
insert
into
Role
(name, id)
values
(?, ?)
Hibernate:
insert
into
Role
(name, id)
values
(?, ?)
Hibernate:
insert
into
User
(name, id)
values
(?, ?)
Hibernate:
insert
into
Role_User
(roles_id, users_id)
values
(?, ?)
Hibernate:
insert
into
Role_User
(roles_id, users_id)
values
(?, ?)
Hibernate:
insert
into
Role_User
(roles_id, users_id)
values
(?, ?) 删除用户139的ADMIN权限
User u = session.get(User.class,139L);
Set<Role> roles = u.getRoles();
Iterator<Role> ites = roles.iterator();
while(ites.hasNext()) {
Role r = ites.next();
if(r.getName().equals("ADMIN")){
r.getUsers().remove(u);//执行成功,删除关系,而不删除用户
//u.getRoles().remove(r);//执行失败,关系它不维护
}
}
多对多manytomany的更多相关文章
- Django---图书管理系统,多对多(ManyToMany),request获取多个值getlist(),反查(被关联的对象.author_set.all)
Django---图书管理系统,多对多(ManyToMany),request获取多个值getlist(),反查(被关联的对象.author_set.all) 一丶多对多查询 表建立多对多关系的方式 ...
- JPA多对多@manytomany注解配置实例
维护端注解 @ManyToMany (cascade = CascadeType.REFRESH) @JoinTable (//关联表 name = "student_teacher&quo ...
- hibernate 多对多(many-to-many)
多对多(many-to-many):在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使用中最好转换成一对多的对象模型:hibernate会为我们创建中间关联表,转换成两个一对多. 1. E- ...
- spring data jpa 多对多 ManyToMany
环境搭建 源码地址:gitee:https://gitee.com/ytfs-dtx/JPA 导入依赖 <properties> <spring.version>5.2.5.R ...
- @ManyToMany 两个表多对多关联
两个表属于多对多关系 如 Teacher <=> Student 表teacher 主键 id 表student 主键id 中间关联表 teacher_student 两个字段 t_id ...
- Hibernate双向多对多关联
一.配置双向多对多关联 以Project类(项目)和Emp类(员工)为例: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 priva ...
- Django--models多对多
多对多--ManyToMany 应用场景 在某表中创建一行数据时,有一个可以多选的下拉框(一对一是单选框)例如:创建用户信息,需要为用户指定多个爱好 创建表 两种方法,一个是利用Django自动为多对 ...
- Hibernate映射多对多双向关联关系(小案例)
多对多双向关联关系(Project(工程)/Emp(员工)为案例): 步骤如下: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 pr ...
- 008多对一 关联映射 --- many-to-one
多对一 --- many-to-one 一对多 --- one-to-many 一对一 --- one-to-one 多对多 --- many-to-many 场景:用户和组:从用户角度来,多个用户属 ...
随机推荐
- Web 建站技术中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什么(转)
Web 建站技术中,HTML.HTML5.XHTML.CSS.SQL.JavaScript.PHP.ASP.NET.Web Services 是什么?修改 建站有很多技术,如 HTML.HTML5.X ...
- Oracle数据库 基础SQL语句练习
一.说明 第一次使用Oracle,想做一些练习,熟悉一些oracle. 表:使用的是scott用户,默认的表 具体表讲解,可以参考该文档:https://www.cnblogs.com/xjcheng ...
- (转)用JS获取地址栏参数的方法(超级简单)
转自http://www.cnblogs.com/fishtreeyu/archive/2011/02/27/1966178.html 用JS获取地址栏参数的方法(超级简单) 方法一:采用正则表达式获 ...
- java数据类型运算符类型转换
Java基本数据类型 基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型.它们是我们编程中使用最频繁的类型,因此面试题中也总少不了它们的身影,在这篇文章中我们将从面试中常考的几个方面来回顾一下 ...
- 网络编程三 Socket
1.根据netstat端口的找到进程号---->根据进程号找到进程名称-------->终止进程 1) netstat 最后一列是5432 C:\Users\Administrato ...
- .net core+Spring Cloud学习之路 二
前言: 原本计划这次写一下搭建eureka群集.但是发现上次写的只是服务的注册,忘了写服务的发现,所以这次先把服务发现补上去. 我们基于上篇文章,再新建两个.net core web api项目,分别 ...
- 《DSP using MATLAB》Problem 7.27
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- JAVA创建和销毁对象
类静态方法取代构造方法创建对象 类静态方法有名称,可以通过名称说明返回的是什么类型的实例 可以控制是否需要新开辟内存空间 返回值是可以控制的 实体类属性非常多的时候使用build模式创建对象 单例实体 ...
- c#函数地址传入c++
c# private delegate void ValidateEvent(int eventCode); private static void ValidateEventCallback(int ...
- 使用sphinx快速为你python注释生成API文档
sphinx简介sphinx是一种基于Python的文档工具,它可以令人轻松的撰写出清晰且优美的文档,由Georg Brandl在BSD许可证下开发.新版的Python3文档就是由sphinx生成的, ...