Не удаляется элемент из базы данных

Рейтинг: 0Ответов: 1Опубликовано: 16.04.2023

метод deleteSubject. Через Post запрос я получаю id элемента, ищу ещё через репозиторий и он его находит, по логам в if попадет. Пытался удалить этот элемент через delete / deleteById репозитория этого элемента, но он не удалятся. введите сюда описание изображения

введите сюда описание изображения введите сюда описание изображения

введите сюда описание изображения

Ответы

▲ 1Принят

Попробуйте установить 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));
}