• 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);
        }
    }
    

      

  • 相关阅读:
    解惑丨C语言字符串常量、字符数组、字符指针!
    程序员压根就不想找对象?谁说的,给我站出来!
    C/C++实习工作应该具备那些能力?才能拿更好的工作和薪资!
    mysql查看创建数据表的DDL语句
    .NET 5 ML.NET 部署运行时出现 Unable to load DLL MklImports 的处理方法
    canvas波浪扇形
    小程序 Canvas 倒计时组件 (React 版)
    Canvas 倒计时
    策略模式实战中多种写法
    MySQL-基础架构介绍
  • 原文地址:https://www.cnblogs.com/zhangrongfei/p/11395297.html
Copyright © 2020-2023  润新知