Я пытаюсь удалить большое количество строк из MOTHER
благодаря запросу JPQL.
Класс MOTHER
определяется следующим образом:
@Entity
@Table(name = "MOTHER")
public class Mother implements Serializable {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "mother",
orphanRemoval = true)
private List<Child> children;
}
@Entity
@Table(name = "CHILD")
public class Child implements Serializable {
@ManyToOne
@JoinColumn(name = "MOTHER_ID")
private Mother mother;
}
Как вы можете видеть, класс MOTHER
имеет "дети" и при выполнении следующего запроса:
String deleteQuery = "DELETE FROM MOTHER WHERE some_condition";
entityManager.createQuery(deleteQuery).executeUpdate();
генерируется исключение:
ERROR - ORA-02292: integrity constraint <constraint name> violated -
child record found
Конечно, я мог бы сначала выбрать все объекты, которые я хочу удалить, и загрузить их в список, прежде чем повторять его, чтобы удалить весь восстановленный объект, но производительность такого решения просто ужасна!
Итак, есть ли способ использовать предыдущее сопоставление, чтобы удалить все объекты MOTHER
и все связанные с ними объекты Child
, и не записывая сначала запросы для all дети?