powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA/Hibernate почему не работает каскадное удаление?
12 сообщений из 12, страница 1 из 1
JPA/Hibernate почему не работает каскадное удаление?
    #38414704
mvn3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
Есть bidirectional 2 сущности связь 1-*

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
@Entity
@Table(name = "route")
public class Route implements Serializable {
     .....................
     ....................
     @OneToMany(fetch = FetchType.LAZY, mappedBy = "route",  cascade = CascadeType.REMOVE)
     private List<ExcFlow> flowList;
}



Ну и соответственно 2-я энтити - ExcFlow

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Entity
@Table(name = "exc_flow")
public class ExcFlow implements Serializable {
         ......................................
         ......................................
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "route_path_fk")
    private RoutePath route;
}




Теперь при удалении route-etity я получаю ошибку что мол есть внешние ключи на таблицу ExcFlow.
1) Почему, ведь я же указал cascade = CascadeType.REMOVE?
2) Почему когда я вижу сгенерированный код DDL код таблицы ExcFlow то не указано в ней каскадного удаления, а просто ON UPDATE NO ACTION ON DELETE NO ACTION ?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE exc_flow
(
  exc_flow_id bigserial NOT NULL,
  create_date timestamp without time zone NOT NULL,
  ..................................
  route_path_fk bigint,
  CONSTRAINT cfid_exc_flow_pkey PRIMARY KEY (exc_flow_id),
  CONSTRAINT fk4773145eefa0a0f5 FOREIGN KEY (route_path_fk)
      REFERENCES cfid_route_path (route_path_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)



Хотя если явно переопределить ON DELETE CASCADE все работает на ура.
Enviroment:
JPA 2.0 /Hibernate / JBoss 7.1.3

Что я делаю не так
...
Рейтинг: 0 / 0
JPA/Hibernate почему не работает каскадное удаление?
    #38414715
Мужик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mvn3Теперь при удалении route-etity я получаю ошибку что мол есть внешние ключи на таблицу ExcFlow.
1) Почему, ведь я же указал cascade = CascadeType.REMOVE?
2) Почему когда я вижу сгенерированный код DDL код таблицы ExcFlow то не указано в ней каскадного удаления, а просто ON UPDATE NO
1) Все правильно, Hibernate пытается удалить ExcFlow, а на нее есть какие-то ссылки с других, вот и не может. Ищите, кто ссылается на ExcFlow.
2) Потому что аннотация @OneToMany не влияет на генерацию схемы БД. А casace = CascadeType.REMOVE означает, что зависимые сущности будут удалены средствами провайдера JPA. Если действительно нужно удаление средствами БД, можно повесить аннотацию Hibernate @OnDelete(action=CASCADE).
...
Рейтинг: 0 / 0
JPA/Hibernate почему не работает каскадное удаление?
    #38414731
mvn3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мужик1) Все правильно, Hibernate пытается удалить ExcFlow, а на нее есть какие-то ссылки с других, вот и не может. Ищите, кто ссылается на ExcFlow.


Спасибо за ответ, но на таблицу ExcFlow никто и ничто не ссылается, она одиночка
...
Рейтинг: 0 / 0
JPA/Hibernate почему не работает каскадное удаление?
    #38414738
Мужик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mvn3Теперь при удалении route-etity я получаю ошибку что мол есть внешние ключи на таблицу ExcFlow.
mvn3Спасибо за ответ, но на таблицу ExcFlow никто и ничто не ссылается, она одиночка
Так все-таки на какую таблицу внешние ключи?
...
Рейтинг: 0 / 0
JPA/Hibernate почему не работает каскадное удаление?
    #38414743
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mvn3,
Стратегия @OnDelete пока не поддерживается, но есть аннотация @Cascade, ей и надо пометить инверсную сторону (которая mappedby). Атрибут cascade в аннотации @OneToMany и @ManyToOne на инверсной стороне не работает
...
Рейтинг: 0 / 0
JPA/Hibernate почему не работает каскадное удаление?
    #38414763
mvn3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мужикmvn3Теперь при удалении route-etity я получаю ошибку что мол есть внешние ключи на таблицу ExcFlow.
mvn3Спасибо за ответ, но на таблицу ExcFlow никто и ничто не ссылается, она одиночка
Так все-таки на какую таблицу внешние ключи?

Да сори,я был не прав по поводу одиночки. С точки зрения DDL таблицы выглядят вот так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
CREATE TABLE route_path ---- сущность Route 
(
  route_path_id bigint NOT NULL,
  create_date timestamp without time zone NOT NULL,
  expires_date timestamp without time zone NOT NULL,
  last_modif_date timestamp without time zone NOT NULL,
  opt_status_flag character varying(255) NOT NULL,
  route_name character varying(255) NOT NULL,
  route_path_label character varying(255) NOT NULL,
  CONSTRAINT cfid_route_path_pkey PRIMARY KEY (route_path_id),
  CONSTRAINT cfid_route_path_route_name_key UNIQUE (route_name)
)


CREATE TABLE exc_flow
(
  exc_flow_id bigserial NOT NULL,
  create_date timestamp without time zone NOT NULL,
  destination character varying(255),
  expires_date timestamp without time zone NOT NULL,
  last_modif_date timestamp without time zone NOT NULL,
  ops_status_flag character varying(255) NOT NULL,
  ors_application character varying(255) NOT NULL,
  source character varying(255) NOT NULL,
  route_path_fk bigint,
  CONSTRAINT exc_flow_pkey PRIMARY KEY (exc_flow_id),
  CONSTRAINT fk4773145eefa0a0f5 FOREIGN KEY (route_path_fk)
      REFERENCES cfid_route_path (route_path_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)



Только беда в том что я не могу теперь удалить ни одну строку, в каждой таблице. Пишет что есть внешние ключи и пипец
...
Рейтинг: 0 / 0
JPA/Hibernate почему не работает каскадное удаление?
    #38414775
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mvn3
Код: sql
1.
REFERENCES cfid_route_path (route_path_id)


cfid_route_path - таблица?
...
Рейтинг: 0 / 0
JPA/Hibernate почему не работает каскадное удаление?
    #38414910
mvn3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123mvn3
Код: sql
1.
REFERENCES cfid_route_path (route_path_id)


cfid_route_path - таблица?

да это таблица route_path
Просто я для этого поста я удалил все приставки cfid_
...
Рейтинг: 0 / 0
JPA/Hibernate почему не работает каскадное удаление?
    #38415615
Мужик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanramvn3,
Стратегия @OnDelete пока не поддерживается, но есть аннотация @Cascade, ей и надо пометить инверсную сторону (которая mappedby). Атрибут cascade в аннотации @OneToMany и @ManyToOne на инверсной стороне не работает
Атрибут cascade отлично работает на любой стороне в Hibernate 4.2.6, JBoss 7.2.
...
Рейтинг: 0 / 0
JPA/Hibernate почему не работает каскадное удаление?
    #38415708
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
JPA/Hibernate почему не работает каскадное удаление?
    #38415914
Мужик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Мужик,
а это?
Там речь про HQL. Насколько я понял, автор удаляет сущность с помощью EntityManager.remove.
...
Рейтинг: 0 / 0
JPA/Hibernate почему не работает каскадное удаление?
    #38415940
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мужик,
ok
будем ждать полных тестов и маппинга.
Т.к. весь инет пестрит глюкавостью каскада. В том числе при удалении сразу нескольких записей-родителей одним запросом.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA/Hibernate почему не работает каскадное удаление?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]