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);
    
        }
    复制代码
  • 相关阅读:
    qwebchannel.js
    锚点
    ECharts
    基于html2canvas实现网页保存为图片及图片清晰度优化
    JS判断某变量是否为某数组中的一个值的3种方法
    .on()之selector——jQuery
    Loading——spin.js
    理解CSS3 transform中的Matrix(矩阵)
    IOS中修改图片的大小:修改分辨率和裁剪
    IOS版本被拒的经历
  • 原文地址:https://www.cnblogs.com/zouhong/p/11643146.html
Copyright © 2011-2022 走看看