JPA: DELETE WHERE не удаляет дочерние элементы и выбрасывает исключение

Я пытаюсь удалить большое количество строк из 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 детей?

26
задан DataNucleus 19 October 2011 в 18:25
поделиться