Методы Delete и DeleteById не работают в Hibernate - PullRequest
0 голосов
/ 23 января 2019

Мои методы Delete () и DeleteById () в JPARepository не работают, я понятия не имею, почему.У меня есть 3 класса: Station, Line и StationLine.StationLine - это просто класс, который связывает первые два и имеет некоторые дополнительные атрибуты, которые я буду использовать позже в коде.

Строка имеет атрибут:

@OneToMany(fetch = FetchType.EAGER, mappedBy = "line", cascade = CascadeType.ALL)
private List<StationLine> stations;

Stationимеет атрибут:

@OneToMany(fetch = FetchType.LAZY, mappedBy="station", cascade=CascadeType.ALL)
private List<StationLine> stationLines;

StationLine имеет атрибуты:

@ManyToOne(optional=false)
private Station station;

@ManyToOne(optional=false)
private Line line;

Проблема в следующей части кода:

for(StationLine sl : stationsToRemove) {
    StationLine found = stationLineRepository.findById(sl.getId()).orElse(null);
    if(found == null) { throw new StationNotFoundException("Station " + sl.getStation().getName() + " not found!"); }

    stationLineRepository.deleteById(found.getId());

    found = stationLineRepository.findById(found.getId()).orElse(null);
    if(found != null) {throw new StationNotFoundException("Station " + found.getId() + " " + found.getStation().getName() + " should be null but it is not!");} 
}

Как видите, я добавил некоторый код до и после DeleteById (), который не нужен, но просто для проверки, все ли работает нормально.Перед удалением он всегда находит объект StationLine, который в порядке, но после этого он также находит его, что не хорошо, если он был удален ранее.

Та же ситуация для Delete ().

Если яправильно, с этими отношениями Station и Line должны быть полностью независимы от StationLine, поэтому их удаление не должно влиять на них.Я также пытался удалить его непосредственно в базе данных, и он работает без каких-либо ошибок, так что это должно означать, что отношения в порядке, верно?

Пожалуйста, помогите!

1 Ответ

0 голосов
/ 23 января 2019

Я не могу сказать, как вы настроили свой Hibernate, но я спорю, что вы не справляетесь со своей сессией должным образом. Если вы не очистите свой сеанс, объект все еще может ожидать команды фиксации в памяти, и он не будет изменен, пока это не произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...