多对多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 场景:用户和组:从用户角度来,多个用户属 ...
随机推荐
- .net 客户端调用java或.net webservice进行soapheader验证
.net 客户端调用java或.net webservice进行soapheader验证 最近项目中有业务需要跨平台调用web服务,客户端和服务器之间采用非对称加密来保证数据的安全性,webservi ...
- jQuery-4.动画篇---淡入淡出效果
jQuery中淡出动画fadeOut 让元素在页面不可见,常用的办法就是通过设置样式的display:none.除此之外还可以一些类似的办法可以达到这个目的.这里要提一个透明度的方法,设置元素透明度为 ...
- 初学io
IO流: 01.File 创建文件 //创建文件夹 private static void mkdirs() { System.out.println("请您输入创建的文件夹名称:(默认是E ...
- Android版本28使用http请求
Android版本28使用http请求报错not permitted by network security policy android模拟器调试登录的时候报错 CLEARTEXT communic ...
- 不同系统、不同存储格式(textfile, parquet)数据的传递
描述: 本地测试环境hive中有数据,存储格式为textfile,现在要上传到公司开发环境,存储格式为parquet, 如何实现??? tb_textfile表---> local file - ...
- .NET第一章
1.介绍了.NET的作用和软件前景趋势 2.Visual studio .net 编程 3.介绍.net可以多种编程语言,通过公共语言类库存放 2.介绍C# 数据类型和变量设置,以及函数的使用 3.继 ...
- SQL SEVER 时间格式转换
常用:时分秒(HH:mm:ss):Select CONVERT(varchar(100), GETDATE(), 8) : 10:57:46年月日 (yyyyMMdd):Select CONVERT( ...
- js 中数字与字符串之间的转换
数字转换为字符串 var num = 123: 1.num.toString 2."" + num 3.String(num) 将数字转化为格式化后的字符串 num.toFixe ...
- js判断页面在pc端打开还是移动端打开
js判断页面在pc端打开还是移动端打开,分别跳转不同的index.html window.addEventListener('load', function() { // true为手机,false为 ...
- Unity 常用插件1
作者:Meta42链接:https://www.zhihu.com/question/29097415/answer/229015898来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...