Допустим, у нас есть две сущности, A и B. B имеет отношение «многие к одному», как A: 1. 1001 *
@Entity
public class A {
@OneToMany(mappedBy="a_id")
private List<B> children;
}
@Entity
public class B {
private String data;
}
Теперь я хочу удалить объект A и каскадно удалить все его дочерние объекты (B). Есть два способа сделать это:
1) Добавьте cascade=CascadeType.ALL, orphanRemoval=true
к аннотации OneToMany, позволяя JPA удалить все дочерние объекты перед удалением A-объекта из базы данных.
2) Оставьте классы такими, какие они есть, и просто позвольте базе данных каскадировать удаление.
Есть ли проблемы с использованием более поздней опции? Приведет ли это к тому, что Entity Manager сохранит ссылки на уже удаленные объекты? Моя причина выбора варианта два над одним состоит в том, что вариант один генерирует n + 1 SQL-запросов для удаления, что может занять продолжительное время, когда объект A содержит много дочерних элементов, в то время как второй вариант генерирует только один SQL-запрос и затем переходит к счастливо. Есть ли какая-либо «лучшая практика» в этом отношении?