zoukankan      html  css  js  c++  java
  • 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);
        }
    }
    

      

  • 相关阅读:
    找到IOS中的闪退日志
    day10-单元测试用例
    1、MySQL索引优化分析
    大话处理器-第2章-初识处理器
    sunset: dusk
    CK: 00
    My File Server: 1
    [luogu 5049] 旅行(数据加强版)
    [luogu p1081] 开车旅行
    [luogu p1613] 跑路
  • 原文地址:https://www.cnblogs.com/zhangrongfei/p/11395297.html
Copyright © 2011-2022 走看看