jpa 多对多关联关系 -- 两方主控
1. user
@Getter
@Setter
@Entity
@Table(name = "t_user")
@NoArgsConstructor
public class User {
@Id
private Long id;
private String username;
public User(Long id, String username) {
this.id = id;
this.username = username;
}
/**
* 所属的角色
*/
@ManyToMany
@JoinTable(name = "mt_user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<>();
}
2. role
@Getter
@Setter
@Entity
@Table(name = "t_role")
@NoArgsConstructor
public class Role {
@Id
private Long id;
private String roleName;
public Role(Long id, String roleName) {
this.id = id;
this.roleName = roleName;
}
/**
* 角色所包含的用户
*/
@ManyToMany
@JoinTable(name = "mt_user_role", joinColumns = @JoinColumn(name = "role_id"), inverseJoinColumns = @JoinColumn(name = "user_id"))
private Set<User> users = new HashSet<>();
}
3. 建立关联关系,无论哪一边均可。
方式一:
User user = this.userRepository.findById(1L).orElse(null);
Role role1 = this.roleRepository.findById(1L).orElse(null);
Role role2 = this.roleRepository.findById(2L).orElse(null);
user.getRoles().add(role1);
user.getRoles().add(role2);
方式二:
User user = this.userRepository.findById(1L).orElse(null);
Role role1 = this.roleRepository.findById(1L).orElse(null);
Role role2 = this.roleRepository.findById(2L).orElse(null);
role1.getUsers().add(user);
role2.getUsers().add(user);
4.删除关联关系 -- 两边均可
方式一:
User user = this.userRepository.findById(1L).orElse(null);
user.setRoles(new HashSet<>());
方式二:
Role role1 = this.roleRepository.findById(1L).orElse(null);
role1.setUsers(new HashSet<>());
5.删除实体 -- 两边均可
Role role2 = this.roleRepository.findById(2L).orElse(null);
this.roleRepository.delete(role2);
6.更新关联关系 -- 两边均可
User user = this.userRepository.findById(1L).orElse(null);
user.getRoles().removeAll(user.getRoles());
Role role3 = this.roleRepository.findById(3L).orElse(null);
user.getRoles().add(role3);
或
User user1 = this.userRepository.findById(1L).orElse(null);
User user2 = this.userRepository.findById(2L).orElse(null);
Role role3 = this.roleRepository.findById(3L).orElse(null);
role3.getUsers().removeAll(role3.getUsers());
role3.getUsers().add(user1);
role3.getUsers().add(user2);
浙公网安备 33010602011771号