Удалить не работает в Hibernate / Spring Data - PullRequest
0 голосов
/ 17 мая 2018

Допустим, у меня есть:

class Car {
    ...
    @OneToMany(mappedBy = "wheel", fetch = FetchType.LAZY)
    @Cascade(org.hibernate.annotations.CascadeType.ALL)
    Set<Wheel> wheels;

}

class Wheel {
    ...
    @ManyToOne(fetch = FetchType.LAZY)
    Car car

}

У меня есть этот код (данные пружины, wheelRepository расширяет CrudRepository) для удаления колеса:

wheelRepository.delete(wheel);

Код не удаляетруль и не выкидывает никаких исключений.Глядя на журнал sql, нет оператора «delete».

Я наконец-то обнаружил проблему: у меня есть машина с колесным набором, содержащим колесо.

Выполнение этого решитпроблема:

car.getWheels().remove(wheel);
wheelRepository.delete(wheel);

Но можно ли избежать первой строки: когда я удаляю колесо, я хочу, чтобы колесо автоматически снималось с его автомобиля?

Еще один вопрос: это так?возможно ли по умолчанию генерировать исключение вместо «беззвучного удаления»?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

Вы пытаетесь удалить Wheel, который содержит Car

Но для Car вы не указали CascadeType.

Таким образом, при удалении Wheel он обращается к Car.

@ManyToOne(cascade = CascadeType.ALL) 

Добавьте это в машину внутри колеса и попробуйте.

0 голосов
/ 17 мая 2018

То, что вы хотите, не совсем возможно.Когда вы звоните wheelRepository.delete(wheel), вы, по сути, просите удалить колесо из базы данных.Но это не может удалить экземпляр wheel из всех других мест в вашем запущенном приложении, на которые теперь ссылается этот экземпляр.Такие как car.wheels.Так что этот экземпляр будет продолжать жить.Таким образом, он не может быть удален из базы данных.Если вы хотите удалить wheel, вы должны сначала удалить его из всех cars, которые используют wheel.Точно так же, как в реальной жизни:)

0 голосов
/ 17 мая 2018

Вы можете определить свое поле wheels следующим образом:

@OneToMany(mappedBy = "wheel", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
Set<Wheel> wheels;

Это гарантирует, что при удалении сущности Wheel Car сущности, ставшие сиротами из-за нее, также будут удалены.

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