博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Data JPA:关联映射操作
阅读量:4581 次
发布时间:2019-06-09

本文共 6897 字,大约阅读时间需要 22 分钟。

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
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
getUserSet() { return userSet; } public void setUserSet(Set
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
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
getRoles() { return roles; } public void setRoles(Set
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
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
getUsers() { return users; } public void setUsers(Set
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
roles = user.getRoles(); System.out.println(roles); }

 

转载于:https://www.cnblogs.com/lilb/p/10680304.html

你可能感兴趣的文章
[bzoj3036]绿豆蛙的归宿
查看>>
[洛谷P5057][CQOI2006]简单题
查看>>
多线程同步的几种方法
查看>>
数据结构-冒泡排序
查看>>
关于程序状态字寄存器PSW(Program Status Word)与多核多线程
查看>>
mybatis的缓存
查看>>
java 缓冲流 Buffer
查看>>
7月23号=》261页-265页
查看>>
软考知识点梳理--综合布线
查看>>
Mysql5.6主从热备配置
查看>>
VS2010DebugView捕捉
查看>>
mfix中更改time dependent VTK filename的最大时间步数的容量
查看>>
Windows7安装 docker-compose的过程
查看>>
关于nodeJS多线程的支持,目前看来无法实现,讲解v8的一些东西
查看>>
php递归创建文件夹的两种方法
查看>>
6.新增事件
查看>>
|洛谷|二分|P1182 数列分段Section II
查看>>
少儿编程Scratch第四讲:射击游戏的制作,克隆的奥秘
查看>>
Oracle学习第七课-表连接及其应用
查看>>
Python基础篇【第十三篇】:面向对象
查看>>