Как при обновлении данных пользователя в БД старые роли заменить новыми?
Объект User имеет отношение OneToMany к объекту Role.
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "username", nullable = false)
private String username;
@Column(name = "password", nullable = false)
private String password;
@OneToMany(mappedBy = "userId", cascade = CascadeType.ALL)
private List<Role> roles;
public User() {}
public User(Long id, String username, String password, List<Role> roles) {
this.id = id;
this.username = username;
this.password = password;
this.roles = roles;
}
public User(Long id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
}
Объект Role имеет отношение ManyToOne к объекту User.
@Entity
@Table(name = "roles")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id", referencedColumnName = "id", nullable = false)
private User userId;
@Column(name = "role_name", nullable = false)
private String roleName;
public Role() {}
public Role(Long id, User userId, String roleName) {
this.id = id;
this.userId = userId;
this.roleName = roleName;
}
}
Теперь, когда я пытаюсь ОБНОВИТЬ существующие данные польхователя путём
userRepository.save(new User(existingId, newUsername, newPassword, newRoles));
то username и password, успешно обновляются, но с ролями пользователя дела обстоят иначе. Существующие роли этого пользователя не заменяются новыми, а наоборот добавляются к существующим.
Говоря простыми словами, я хочу, чтобы при ОБНОВЛЕНИИ данных пользователя новые роли удалялись и заменялись новыми.
Можно ли получить этот эффект, например, изменив CascadeType или прочими простыми элегантными способами?