ORA-02292: ограничение целостности (xxx) нарушено - найдена дочерняя запись - PullRequest
0 голосов
/ 11 октября 2018

Как мне удалить все записи, используя hibernate deleteAll ()?

У меня есть класс с несколькими отношениями @oneToMany (имеющий как +5000 дочерних объектов), и когда я пытаюсь сделать deleteAll, я получаю заголовокошибка

oracle.jdbc.OracleDatabaseException: ORA-02292: integrity constraint (xxx) violated - child record found

Я пытался добавить

cascade = {CascadeType.ALL}

и

orphanRemoval=true

в класс отношений @OneToMany, но без помощи.

Это двунаправленная связь со следующими классами

@OneToMany(targetEntity = XXX.class, fetch = FetchType.LAZY, cascade = {CascadeType.ALL}, orphanRemoval=true, mappedBy = "zzz")
    @Fetch(FetchMode.SELECT)
    @JsonManagedReference
    private List<XXX> xxx;

@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(targetEntity = YYY.class, fetch = FetchType.LAZY, orphanRemoval=true, cascade = {CascadeType.ALL}, mappedBy = "zzz")
@Fetch(FetchMode.SELECT)
@JsonManagedReference
private List<YYY> yyy;

с дочерними элементами, такими как

@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
@JoinColumn(name = "XXX", nullable=false)
@JsonBackReference
private XXX zzz;

Я также пытался выполнить запрос HQL DELETE, но это тоже меня нигде не вызывает.

Какна земле я последовательно удаляю все эти объекты?До сих пор я вручную удалял таблицы, так как эта проблема началась (все сущности были удалены отлично всего несколько дней назад), но это начинает меня раздражать, но я не могу понять, как это сделать.

Спасибо!

1 Ответ

0 голосов
/ 11 октября 2018

Вы установили CascadeType.ALL для своего родителя, и лучшим способом удаления должен быть вызов единственного удаления для родительского объекта

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

В крайнем случае с этим королем проблем:

  1. Включить вход в Spring Boot Application
  2. Выполнить SQL-запрос, сгенерированный на SQL-сервере
  3. Найти, где происходит ошибка, оценивая текущее состояние базы данных
  4. При необходимости изменить JPA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...