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

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

  

最新文章

  1. 用jdbc访问二进制类型的数据
  2. Android基础:Activity
  3. EB(存储单位)
  4. ffmpeg转码MPEG2-TS的音视频同步机制分析
  5. 又来折腾Linux
  6. Arcgis 10.1中空间连接功能
  7. 图的邻接链表实现(c)
  8. 百度统计的JS脚本原理分析
  9. [C#]使用Label标签控件模拟窗体标题的移动
  10. 巧用CAS解决数据一致性问题
  11. SpringMVC之拦截器实现登录验证
  12. Python基础 列表介绍、使用
  13. OO第十五次作业
  14. XAML绑定到资源文件字符串时失败
  15. AD域部署使用bginfo软件
  16. WAS 常见报错
  17. Pandas DataFrame学习笔记
  18. [翻译] ZLHistogramAudioPlot
  19. JMM随笔
  20. DBMS_METADATA中使用SESSION_TRANSFORM过滤不想获取的DDL

热门文章

  1. 【题解】P2602 数字计数 - 数位dp
  2. Servlet 和 Servlet容器
  3. MVC-过滤器-权限认证
  4. Docker镜像与仓库(四)
  5. MySQL数据库入门详细笔记
  6. GitHub 被指审查内容,著名“换脸”开源项目 deepfake 遭限制访问
  7. nginx响应超时upstream timed out 问题处理
  8. Get史上最优雅的加密方式!没有之一!
  9. SAAS 何以“免费”实现盈利
  10. 使用SWIG将C++接口转换成Java接口