• 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);
    
        }
    复制代码
  • 相关阅读:
    【ArcGIS 10.2新特性】ArcGIS 10.2将PostgreSQL原生数据发布为要素服务
    字节流,字符流 有什么区别
    java--模板方法模式
    hdu2829 四边形优化dp
    【ArcGIS 10.2新特性】ArcGIS 10.2 for Desktop 新特性(二)
    B/S架构 Web打印程序(Argox)
    poj 1611 The Suspects(并查集)
    microsoft visual studio遇到了问题,需要关闭
    [置顶] Windows显示驱动(WDDM)编程初步(2)
    Linux查看设置系统时区
  • 原文地址:https://www.cnblogs.com/zouhong/p/11643146.html
Copyright © 2020-2023  润新知