Предположим, что у нас есть две сущности: A и B. B имеет отношение много к одному с A следующим образом:
@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-запрос, а затем переходит счастливо. Есть ли "лучшая практика" в этом отношении?