多对多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 场景:用户和组:从用户角度来,多个用户属 ...
随机推荐
- Mac pip install mysql-python
首次在mac os 下,用pip install MySQL-Python时经常出现如下错误: sh: mysql_config: command not foundTraceback (most r ...
- js bind0
$(function(){ $("#ul").on('click','li',function(){ if(!$(this).a $(function(){ $("#ul ...
- Find Longest common string
动态规划法: 用二维矩阵来的每个元素来代表两个字符串的字符匹配情况, LCS[i, j]= LCS[i-1, j-1] + 1 , if X[i-1] == Y[J-1]. LCS[i, j] =0 ...
- SublimeText 3200 package Control 安装
写一点自己的坑 花了2个小时时间才弄好 先上干货 https://github.com/wbond/package_control 这里直接 Clone zip 解压 后将整个文件夹改名为 " ...
- linux下mysql的启动与关闭
1.查看mysql版本 方法一:status; 方法二:select version(); 2.Mysql启动.停止.重启常用命令 a.启动方式 1.使用 service 启动: [root@loca ...
- JSF生命周期&Facelets的生命周期
1.JSF生命周期 1)恢复视图(Restore View) 视图表示组成特定页面的所有组件.它被保存在 客户端(通常存储在隐藏字段中)或服务器中(通常在会话中).根据请求访问的视图ID(页面地址), ...
- 关于E-R图
E-R图 简介: E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联系的方法.用来描述现实世界的概念模型.它是描述现实世界概念结构模型的有 ...
- 13. Forensics (取证 4个)
Maltego是一个取证和数据挖掘应用程序. 它能够查询各种公共数据源,并以图形方式描绘人员,公司,网站和文档等实体之间的关系. Maltego也是一个开源智能,但不是开源软件. Helix The ...
- ubutu16.04 安装Tenda u12无线网卡驱动
ubutu16.04 安装Tenda u12无线网卡驱动 一些问题: 1) Tenda u12 linux版本的驱动支持 kernel 2.6 到 4.4,而前系统内版本核为4.10,所以编译不过去啦 ...
- NFPA, UL
Who or what is NFPA? NFPA (National Fire Protection Association) is an organization in the USA that ...