• 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);
    
        }
  • 相关阅读:
    数据结构与算法-字符串与字符串匹配算法
    操作系统-PV操作的原理和几种常见问题
    操作系统-进程(8)-临界区管理
    利用队列实现逐行打印杨辉三角形的前n行
    操作系统-进程(7)死锁和银行家算法
    计算机网络-网络层(6)ICMP协议
    操作系统-进程(6)管程
    计算机网络-链路层(5)点对点链路控制
    操作系统-进程(5)进程通信机制
    RTSP/RTMP流媒体协议网页无插件直播视频平台浏览器请求地址自带尾缀符解释说明
  • 原文地址:https://www.cnblogs.com/lilb/p/10680304.html
Copyright © 2020-2023  润新知