一、编写实体类配置关联关系:

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表关系:多对多的更多相关文章

  1. 库增删该查,表增删该查,记录增删该查,表与表关系(多对多,多对一,一对一),mysql用户管理

    库增删该查 增加库 create database db1 create database db1 charset="gbk 查看库 show databases 查看所有库 show cr ...

  2. day 69 orm操作之表关系,多对多,多对一(wusir总结官网的API)

    对象  关系  模型 wusir博客地址orm官网API总结 django官网orm-API orm概要: ORM 跨表查询 class Book(models.Model): title = mod ...

  3. springData表关系:一对多

    一.编写实体类进行表关联 1.在一张表的关联属性上添加@OneToMany注解(关联属性用来记录多的一方的信息,是个集合,一般用set) 2.在另一个实体类的关联属性上添加@ManyToOne注解和  ...

  4. springData表关系:一对一

    一.编写两个实体类 1.一对一关系实现:a:使用外键关联 b:使用主键关联,两个表的主键相同 2.外键方案:配置关联关系:两个实体类互相关联,并且在关联的属性上添加一个@OneToOne代表一个对一个 ...

  5. mysql 表关系 与 修改表结构

    目录 mysql 表关系 与 修改表结构 两张表关系 分析步骤 修改表结构 mysql 表关系 与 修改表结构 两张表关系 多对一 以员工和部门举例 多个员工对应一个部门 foreign key 永远 ...

  6. Python之路第十三天,高级(7)-详述数据库一对多,多对多表关系的设计以及如何查询

    一对多表设计和查询方法 #!/usr/bin/env python3 # Author: Zhangxunan from sqlalchemy import create_engine from sq ...

  7. EF5+MVC4系列(1) Podwerdesigner15.1设计数据库;PD中间表和EF实体模型设计器生成中间表的区别;EF5.0 表关系插入数据(一对多,多对多)

    在上一篇文章中, http://www.cnblogs.com/joeylee/p/3790980.html  我们用 PD15.1 来设计了数据库,并且生成 了sql数据库,现在我们用 vs2013 ...

  8. 【mysql】如何通过navicat配置表与表的多对一关系,一对一关系?设计外键的效果

    背景: 现在要将接口自动化测试结果持久化,当前只是每次运行接口测试,将测试结果通过邮件发送给项目组成员.邮件内容如下: 表设计: 为了呈现这个结果:我设计了2张表run_result和run_deta ...

  9. 订单和产品的多对多表关系在crudapi系统零代码实现

    表关系管理 在上一篇序列号管理中,产品和销售订单都是孤立的单表,本文通过crudapi中表关系(relation)管理将多个表连接起来,形成一个整体. 概要 关系类型 表与表之间的关系(relatio ...

随机推荐

  1. SpringBoot集成MyBatis底层原理及简易实现

    MyBatis是可以说是目前最主流的Spring持久层框架了,本文主要探讨SpringBoot集成MyBatis的底层原理.完整代码可移步Github. 如何使用MyBatis 一般情况下,我们在Sp ...

  2. phpMyAdmin后台文件包含溯源

    先上大佬解释的漏洞原理链接 https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&mid=2247485036&idx=1&sn= ...

  3. NGINX 类漏洞 整理记录

    简单介绍NGINX: Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行. 其特点是占有内存少,并发能力强,nginx的并 ...

  4. mybatis源码学习:从SqlSessionFactory到代理对象的生成

    目录 一.根据XML配置文件构建SqlSessionFactory 二.通过SqlSessionFactory创建SqlSession 三.getMapper获取动态代理对象 一.根据XML配置文件构 ...

  5. linux上Docker安装gogs私服

    一.背景介绍 Gogs 是一款类似GitHub的开源文件/代码管理系统(基于Git),Gogs 的目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Gogs ...

  6. Caused by: java.io.IOException: Type mismath in vlaue from map: excepted org.apache.hadoop.io.InaWritable,received SC

    解决办法: 看map和reduce的输入是不是对应,看看map和reduce设置的参数和下面的是否一致

  7. vscode--常用插件&同步

    1.setting.json文件 { "files.autoSave": "off", "extensions.ignoreRecommendatio ...

  8. ES6的 Iterator 遍历器到底是什么?

    这节课要讲的是ES6中的Iterator. for...of为啥不遍历Object对象 第十三节我们讲了简单又实用的for...of,我们可以使用它来遍历数组,字符串,Set和Map结构,但是有没有发 ...

  9. JVM 真的很难学么?不、只是你“不敢学”而已

    JVM 真的很难学么?不.只是你"不敢学"而已        许多招聘的信息上面都说,要了解jvm.多线程什么的对于 java 程序员来说,这是工作好多年的程序员都不一定能掌握的东 ...

  10. hdu_1052 Tian Ji -- The Horse Racing 贪心

    Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...