Попробуйте установить orphanRemoval = true
для коллекции и добавьте метод(ы) для добавления элементов в коллекцию, которые устанавливали/разрывали бы связь между сущностями:
public class User implements UserDetails {
// ...
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Subject> subjectList = new ArrayList<>();
public void addSubject(Subject subject) {
this.subjectList.add(subject);
subject.setUser(this);
}
public void removeSubject(Subject subject) {
this.subjectList.remove(subject);
subject.setUser(null);
}
}
Исправленный сервисный метод -- в репозитории надо будет вызвать метод save
/saveAndFlush
:
public void deleteSubject(User user, Long subjectId) {
subjectRepository.findById(subjectId)
.ifPresentOrElse(subject -> {
user.removeSubject(subject);
userRepository.save(user);
}, () -> log.warn("Subject not found by id {}", subjectId));
}