spring_data_jpa之多对多

编写实体类
1.User实体类

package com.itheima.domain;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

@Entity
@Table(name = "sys_user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name ="user_id")
    private Long userId;
    @Column(name = "user_name")
    private String userName;
    @Column(name = "user_age")
    private Integer age;
    /*
    * 配置多对多的映射关系
    * 1.声明表关系的配置
    *   @ManyToMany(targetEntity="")
    * 2配置中间表
    *       @joinTable
    *           name:中间表的名称
    *           joinColumn:配置当前对象在中间表的外键,name:中间表的外键,referencedColumnName:该外键参考的当前对象的字段
    *           inverseJoinColumn:配置对方对象在中间表的外键,name:中间表的外键,referencedColumnName:该外键参考的对方对象的字段
     * */
    @ManyToMany(targetEntity = Role.class)
    @JoinTable(name = "sys_user_role",
            joinColumns = {@JoinColumn( name ="sys_user_id",referencedColumnName = "user_id")},
            inverseJoinColumns = {@JoinColumn(name="sys_role_id",referencedColumnName = "role_id")}
    )
    private Set<Role> roles=new HashSet<Role>();

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Set<Role> getRoles() {
        return roles;
    }

    public void setRoles(Set<Role> roles) {
        this.roles = roles;
    }
}

2编写Role实体类

package com.itheima.domain;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

@Entity
@Table(name = "sys_role")
public class Role {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "role_id")
    private Long roleId;
    @Column(name = "role_name")
    private String roleName;
    /*
     * 配置多对多的映射关系
     * 1.声明表关系的配置
     *   @ManyToMany(targetEntity="")
     * 2配置中间表
     *       @joinTable
     *           name:中间表的名称
     *           joinColumn:配置当前对象在中间表的外键,name:中间表的外键,referencedColumnName:该外键参考的当前对象的字段
     *           inverseJoinColumn:配置对方对象在中间表的外键,name:中间表的外键,referencedColumnName:该外键参考的对方对象的字段
     *           放弃维护权
     *           @ManyToMany(MappedBy="roles")
     *
     *
     * */
    @ManyToMany(targetEntity = User.class)
    @JoinTable(name = "sys_user_role",
            joinColumns = {@JoinColumn( name ="sys_role_id",referencedColumnName = "role_id")},
            inverseJoinColumns = {@JoinColumn(name="sys_user_id",referencedColumnName = "user_id")}
    )
    private Set<User> users=new HashSet<User>();
    public Long getRoleId() {
        return roleId;
    }

    public void setRoleId(Long roleId) {
        this.roleId = roleId;
    }

    public String getRoleName() {
        return roleName;
    }

    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }

    public Set<User> getUsers() {
        return users;
    }

    public void setUsers(Set<User> users) {
        this.users = users;
    }
}

3编写Role以及UserDao
4编写测试方法

package com.itheima.test;

import com.itheima.dao.RoleDao;
import com.itheima.dao.UserDao;
import com.itheima.domain.Role;
import com.itheima.domain.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class ManyToManyTest {
    @Autowired
    private UserDao userDao;
    @Autowired
    private RoleDao roleDao;
    @Test
    @Transactional
    @Rollback(false)
    //测试多对多添加
    public void testAdd(){
        User user=new User();
        user.setUserName("小李");
        Role role=new Role();
        role.setRoleName("java程序员");
        user.getRoles().add(role);
//        role.getUsers().add(user);
        userDao.save(user);
        roleDao.save(role);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值