JPA: Многие ко многим не удаляются записи

218
15 мая 2018, 23:50

У меня проблема с проектированием базы данных

Есть сущность User

public class User implements UserDetails, Serializable {
    // ...
    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "MANAGER_ID")
    private Manager manager;
    // ...
}

Она ссылается на сущность Manager

public class Manager {
    // ...
    @OneToMany(mappedBy = "manager", orphanRemoval = true)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<ExpertAndRequest> requests;
    @OneToOne(mappedBy = "manager", orphanRemoval = true, cascade = CascadeType.ALL)
    private User user;

    @OneToMany(mappedBy = "manager")
    private List<ParticipantRequest> participantRequests;

    // ...
}

Есть сущность ParticipantRequest. Ссылается многие к одному к сущность Manager

public class ParticipantRequest {
    // ...
    @OneToMany(mappedBy = "request", cascade = CascadeType.ALL)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<ExpertAndRequest> experts;
    @ManyToOne
    @JoinColumn(name = "manager_id")
    private Manager manager;
    // ...
}

И есть связующая таблица между Manager и ParticipantRequest

public class ExpertAndRequest implements Serializable {
    // ...
    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "managerId", updatable = false, insertable = false, referencedColumnName = "id")
    private Manager manager;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "requestId", updatable = false, insertable = false, referencedColumnName = "id")
    private ParticipantRequest request;
    // ...
}

Я ожидаю, что при удаление User, у меня удалится Manager и связанные с ним ExpertAndRequest. Но вместо этого ничего не происходит... Ни ошибки, ничего не происходит. Как будто все корректно отработано

Удаляю я так:

@GetMapping("/some/url")
@Transactional
@ResponseBody
public ManagerApiResult deleteManager(@RequestParam(name = "id") Long id) {
    if(!this.isUserManager()) {
        return null;
    }
    ManagerApiResult res = new ManagerApiResult();
    Manager manager = this.managerRepository.findOne(id);
    if(manager == null) {
        res.errors.add(String.format("Manager id \"%s\" do not exist", id));
        return res;
    }
    this.userRepository.delete(manager.getUser());
    return res;
}

Что я делаю не так? Бьюсь уже 3-й день и все без успехов(

READ ALSO
Отфильтровать список java

Отфильтровать список java

Приложение состоит из нескольких активностейПриложение - это интернет-магазин

285
Android Studio, запретить вызов Toast поверх другого

Android Studio, запретить вызов Toast поверх другого

У меня есть метод, который вызывает Toast и отображает какую-то строку, но если быстро его вызывать, то сообщения накладываются поверх друг друга,...

213
Joomla 3.8.2 в куске кода в template.css не видит margin

Joomla 3.8.2 в куске кода в template.css не видит margin

Пишу я значит шаблон для сайта и столкнулся с такой проблемой: два последних margin ни в какую не хотят работать, прошарил туеву хучу форумов...

255
Создание &ldquo;зоны невидимости&rdquo; для элемента html

Создание “зоны невидимости” для элемента html

Мне нужно, что бы html элемент исчезал в определённом месте (если он находится на верхней половине страницы)Можно ли создать такую "зону невидимости"...

208