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); }