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

  
転載先:https://www.cnblogs.com/zhangrongfei/p/11395297.html