Spring Data JPA:關聯映射操作


1.一對一的關系關聯

需求:用戶和角色一對一關聯

package com.example.jpa.pojo;

import javax.persistence.*;

@Entity
@Table(name = "t_user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;
    @Column(name = "name")
    private String name;
    /**
     * CascadeType.PERSIST 只有User類新增時,
     * 會級聯Role對象新增。若Role對象在數據庫存(跟新)在則拋異常(讓Role變為持久態)
     */
    @OneToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name = "role_id") //JoinColumn:維護一個外鍵的作用
    private Role role;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Role getRole() {
        return role;
    }

    public void setRole(Role role) {
        this.role = role;
    }
}
package com.example.jpa.pojo;

import javax.persistence.*;

@Entity
@Table(name = "t_role")
public class Role {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;
    @Column(name = "name")
    private String name;
    @OneToOne(mappedBy = "role")
    private User user;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}
 /**
     * 添加用戶同時添加角色
     */
    @Test
    public void test1()
    {
        //創建角色
        Role role =new Role();
        role.setName("小角色");

        //創建用戶
        User user =new User();
        user.setName("小用戶");

        //建立關系
        user.setRole(role);
        role.setUser(user);

        //保存數據
        userRepository.save(user);
    }

    /**
     * 根據用戶id查詢用戶,同時查詢用戶角色
     */
    @Test
    public void test2()
    {
        User user =userRepository.getOne((long)13);
        System.out.println(user);
        Role role = user.getRole();
        System.out.println(role);

    }

2.一對多關聯關系

需求:從角色到用戶的一對多關聯關系

package com.example.jpa.pojo;

import javax.persistence.*;

@Entity
@Table(name = "t_user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;
    @Column(name = "name")
    private String name;

    @ManyToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name = "role_id")
    private Role role;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Role getRole() {
        return role;
    }

    public void setRole(Role role) {
        this.role = role;
    }
}
package com.example.jpa.pojo;

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

@Entity
@Table(name = "t_role")
public class Role {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;
    @Column(name = "name")
    private String name;

    @OneToMany(mappedBy = "role")
    private Set<User> userSet = new HashSet<>();

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<User> getUserSet() {
        return userSet;
    }

    public void setUserSet(Set<User> userSet) {
        this.userSet = userSet;
    }
}
 /**
     * 添加用戶同時添加角色
     */
    @Test
    public void test1()
    {
        //創建角色
        Role role =new Role();
        role.setName("小角色");

        //創建用戶
        User user =new User();
        user.setName("小用戶");

        //建立關系
        user.setRole(role);
        role.getUserSet().add(user);

        //保存數據
        userRepository.save(user);
    }

    /**
     * 根據用戶id查詢用戶,同時查詢用戶角色
     */
    @Test
    public void test2()
    {
        User user =userRepository.getOne((long)13);
        System.out.println(user);
        Role role = user.getRole();
        System.out.println(role);

    }

3.多對多的關聯關系

需求:用戶和角色多對多關系

package com.example.jpa.pojo;

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

@Entity
@Table(name = "t_user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;
    @Column(name = "name")
    private String name;

    @ManyToMany(cascade = CascadeType.PERSIST,fetch = FetchType.EAGER) //fetch = FetchType.EAGER:異步加載
    //JoinTable 配置中間表信息
    //joinColumns 建立當前表在中間表中的外鍵字段
    @JoinTable(name = "t_user_role",joinColumns = @JoinColumn(name = "user_id")
            ,inverseJoinColumns = @JoinColumn(name = "role_id"))
   private Set<Role> roles =new HashSet<>();

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

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

    public void setRoles(Set<Role> roles) {
        this.roles = roles;
    }
}
package com.example.jpa.pojo;

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

@Entity
@Table(name = "t_role")
public class Role {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;
    @Column(name = "name")
    private String name;

    @ManyToMany(mappedBy = "roles")
    private Set<User> users =new HashSet<>();

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

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

    public void setUsers(Set<User> users) {
        this.users = users;
    }
}
    /**
     * 添加用戶同時添加角色
     */
    @Test
    public void test1()
    {
        //創建角色
        Role role =new Role();
        role.setName("小角色");

        //創建用戶
        User user1 =new User();
        user1.setName("小用戶1");

        User user2 =new User();
        user2.setName("小用戶2");


        //建立關系
        role.getUsers().add(user1);
        role.getUsers().add(user2);
        user1.getRoles().add(role);
        user2.getRoles().add(role);

        //保存數據
        userRepository.save(user1);
        userRepository.save(user2);
    }

    /**
     * 根據用戶id查詢用戶,同時查詢用戶所有角色
     */
    @Test
    public void test2()
    {
        User user =userRepository.getOne((long)13);
        System.out.println(user);
        Set<Role> roles = user.getRoles();
        System.out.println(roles);

    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM