@LepikhinEgor
Java developer

Как в hibernate правильно сделать каскадное удаление дочерних элементов?

У меня есть сущность Device, с отношением OneToMany к сущности Sensor. Мне нужно сделать так, чтобы при удалении Device удалялись все связанные с ним Sensor. Сейчас ссылки у них описаны так:
Device.class
@OneToMany(mappedBy = "device", orphanRemoval = true, cascade = CascadeType.ALL)
    private List<Sensor> sensors;


Sensor.class
@JoinColumn(name = "device_id")
    @ManyToOne(fetch = FetchType.LAZY)
    private Device device;


При попытке удалить все Device из таблицы вылезает ошибка:
ошибка
ERROR: ОШИБКА: UPDATE или DELETE в таблице "devices" нарушает ограничение внешнего ключа "fk834yqd4p6g9s2b6ufnba8bxrs" таблицы "sensors"
DETAIL: На ключ (id)=(18) всё ещё есть ссылки в таблице "sensors".
SQL state: 23503

Если посмотреть в PGAdmin код создания таблицы, то там почему-то прописано ON UPDATE NO ACTION
создание devices
CREATE TABLE public.devices
(
id bigint NOT NULL,
last_connection timestamp without time zone,
name character varying(255) COLLATE pg_catalog."default",
type character varying(255) COLLATE pg_catalog."default",
owner_id bigint,
CONSTRAINT devices_pkey PRIMARY KEY (id),
CONSTRAINT fkc610qimpcb4kdm60lpxdccmlr FOREIGN KEY (owner_id)
REFERENCES public.users (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
)
WITH (
OIDS = FALSE
)

Пробовал заменить на аннотацию @Cascade, но никакого результата
  • Вопрос задан
  • 70 просмотров
Пригласить эксперта
Ответы на вопрос 1
@DDwrt100
попробуйте через @Fetch
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы