zoukankan      html  css  js  c++  java
  • 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);
    
        }
    复制代码
  • 相关阅读:
    cinder支持nfs快照
    浏览器输入URL到返回页面的全过程
    按需制作最小的本地yum源
    创建可执行bin安装文件
    RPCVersionCapError: Requested message version, 4.17 is incompatible. It needs to be equal in major version and less than or equal in minor version as the specified version cap 4.11.
    惠普IPMI登陆不上
    Linux进程状态——top,ps中看到进程状态D,S,Z的含义
    openstack-neutron基本的网络类型以及分析
    openstack octavia的实现与分析(二)原理,架构与基本流程
    flask上下文流程图
  • 原文地址:https://www.cnblogs.com/zouhong/p/11643146.html
Copyright © 2011-2022 走看看