一、编写实体类配置关联关系:
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); } }