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


posted on 2020-09-20 15:42  谦虚好学每一天  阅读(201)  评论(0)    收藏  举报

导航