SpringData表关系:多对多
一、编写实体类配置关联关系:
1、多对多使用注解@ManyToMany配置:a、 在实体中添加一个集合属性 b、在属性上添加ManyToMany注解
c、@JoinTable 注解配置关联关系(name中间表名称),当前表和中间表的映射关系,对方表和中间表的映射关系
2、多对多关系中,只能一方维护关联关系、另一方放弃维护
3、级联操作: @ManyToMnay注解中 配置cascade属性
4、 从表:关联属性上所加注解
@ManyToMany(mappedBy = "roles")
主表:关联属性上所加注解
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "sys_user_role",joinColumns = @JoinColumn(
// 中间表和当前表映射字段的名字
name="userid",
// 参照当前表的主键字段
referencedColumnName = "user_id"),
inverseJoinColumns = @JoinColumn(
// 中间表和当前表映射字段的名字
name="roleid",
// 参照当前表的主键字段
referencedColumnName = "role_id")
)
二、编写dao;主表从表dao都要继承JpaRepository
三、测试
package cn.zrf.jpa; import cn.zrf.jpa.dao.SysRoleDao;
import cn.zrf.jpa.dao.SysUserDao;
import cn.zrf.jpa.entity.SysRole;
import cn.zrf.jpa.entity.SysUser;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Commit;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional; @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class ManyToMany {
@Autowired
SysUserDao sysUserDao;
@Autowired
SysRoleDao sysRoleDao; @Test
@Transactional
@Commit
public void addUserAndRole(){
//1、创建用户对象
SysUser user = new SysUser();
user.setUserName("admin");
user.setPassword("admin");
//2、创建角色对象
SysRole role = new SysRole();
role.setRoleName("管理员");
role.setMome("管理全部");
//3、配置用户和角色之间的关系
user.getRoles().add(role);
role.getUsers().add(user);
//4、把用户角色存入数据库
sysUserDao.save(user);
sysRoleDao.save(role);
}
@Test
@Transactional
@Commit
public void addUserAndRole1(){
//1、创建用户
SysUser sysUser = new SysUser();
sysUser.setUserName("张无忌");
sysUser.setPassword("admin");
SysUser sysUser1 = new SysUser();
sysUser1.setUserName("赵敏");
sysUser1.setPassword("admin");
//2、创建角色
SysRole sysRole = new SysRole();
sysRole.setRoleName("演员");
SysRole sysRole1 = new SysRole();
sysRole1.setRoleName("导演");
//3、配置用户和角色的关系
sysUser.getRoles().add(sysRole);
sysUser1.getRoles().add(sysRole);
sysUser.getRoles().add(sysRole1);
sysUser1.getRoles().add(sysRole1);
sysRole.getUsers().add(sysUser);
sysRole1.getUsers().add(sysUser);
sysRole.getUsers().add(sysUser1);
sysRole1.getUsers().add(sysUser1);
//4、存入数据库
sysUserDao.save(sysUser);
sysUserDao.save(sysUser1);
}
//删除
@Test
@Transactional
@Commit
public void del(){
sysUserDao.delete(3l);
}
}
SpringData表关系:多对多的更多相关文章
- 库增删该查,表增删该查,记录增删该查,表与表关系(多对多,多对一,一对一),mysql用户管理
库增删该查 增加库 create database db1 create database db1 charset="gbk 查看库 show databases 查看所有库 show cr ...
- day 69 orm操作之表关系,多对多,多对一(wusir总结官网的API)
对象 关系 模型 wusir博客地址orm官网API总结 django官网orm-API orm概要: ORM 跨表查询 class Book(models.Model): title = mod ...
- springData表关系:一对多
一.编写实体类进行表关联 1.在一张表的关联属性上添加@OneToMany注解(关联属性用来记录多的一方的信息,是个集合,一般用set) 2.在另一个实体类的关联属性上添加@ManyToOne注解和 ...
- springData表关系:一对一
一.编写两个实体类 1.一对一关系实现:a:使用外键关联 b:使用主键关联,两个表的主键相同 2.外键方案:配置关联关系:两个实体类互相关联,并且在关联的属性上添加一个@OneToOne代表一个对一个 ...
- mysql 表关系 与 修改表结构
目录 mysql 表关系 与 修改表结构 两张表关系 分析步骤 修改表结构 mysql 表关系 与 修改表结构 两张表关系 多对一 以员工和部门举例 多个员工对应一个部门 foreign key 永远 ...
- Python之路第十三天,高级(7)-详述数据库一对多,多对多表关系的设计以及如何查询
一对多表设计和查询方法 #!/usr/bin/env python3 # Author: Zhangxunan from sqlalchemy import create_engine from sq ...
- EF5+MVC4系列(1) Podwerdesigner15.1设计数据库;PD中间表和EF实体模型设计器生成中间表的区别;EF5.0 表关系插入数据(一对多,多对多)
在上一篇文章中, http://www.cnblogs.com/joeylee/p/3790980.html 我们用 PD15.1 来设计了数据库,并且生成 了sql数据库,现在我们用 vs2013 ...
- 【mysql】如何通过navicat配置表与表的多对一关系,一对一关系?设计外键的效果
背景: 现在要将接口自动化测试结果持久化,当前只是每次运行接口测试,将测试结果通过邮件发送给项目组成员.邮件内容如下: 表设计: 为了呈现这个结果:我设计了2张表run_result和run_deta ...
- 订单和产品的多对多表关系在crudapi系统零代码实现
表关系管理 在上一篇序列号管理中,产品和销售订单都是孤立的单表,本文通过crudapi中表关系(relation)管理将多个表连接起来,形成一个整体. 概要 关系类型 表与表之间的关系(relatio ...
随机推荐
- 【高频 Redis 面试题】Redis 事务是否具备原子性?
一.Redis 事务的实现原理 一个事务从开始到结束通常会经历以下三个阶段: 1.事务开始 客户端发送 MULTI 命令,服务器执行 MULTI 命令逻辑. 服务器会在客户端状态(redisClien ...
- EF-三种映射
更改实体的类名称,字段名称,来映射表名称,表字段. 1,用EF自带的特性方式: 直接加上特性,更新对应的类名,字段名以及引用类,字段名的相关地方 2,参考NHibernate建立一个EF自带的映射 ...
- 一图解析MongoDB
了解MongoDB,这一张图就够了: 版权所有,转载请注明出处.
- [Abp vNext 入坑分享] - 4.JWT授权的接入
一.感想 在写这一系列文章之前,本来以为写这个之前已经搭建好的框架描述会比较简单,但是慢慢写下来才发现.写这个真的不简单额,本来以为图文一起,一个晚上应该能输出一篇吧...结果:现实真的骨感,一个星期 ...
- Thymeleaf入门入门入门入门入门入门入门入门入门入门入门
Thymeleaf 官网部分翻译:反正就是各种好 Thymeleaf是用来开发Web和独立环境项目的服务器端的Java模版引擎 Spring官方支持的服务的渲染模板中,并不包含jsp.而是Thymel ...
- Jenkins(3)- 安装Jenkins过程中遇到问题的排查思路
如果想从头学起Jenkins的话,可以看看这一系列的文章哦 https://www.cnblogs.com/poloyy/category/1645399.html 安装Jenkins过程中,可能会遇 ...
- 2019-2020-1 20199325《Linux内核原理与分析》第十二周作业
什么是ShellShock? Shellshock,又称Bashdoor,是在Unix中广泛使用的Bash shell中的一个安全漏洞,首次于2014年9月24日公开.许多互联网守护进程,如网页服务器 ...
- 标准库os
os模块 提供对操作系统进行调用的接口 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 os ...
- 2019-05-22 BTC走势分析
转载于:https://juejin.im/post/5ce4adf5f265da1b8c195ff8
- 暑期档追剧指南曝光 HUAWEI nova 2系列再放实用三大招
火辣辣的夏季来啦,每年这时火热的不只天气,还有暑期黄金档影视剧的激烈争夺战.今年有<择天记>收视率珠玉在前,<欢乐颂2>更是引发全民追剧热潮,"小花"赵丽颖 ...