Вопрос проверяет понимание жизненного цикла дочерних сущностей и управления связями в JPA.
orphanRemoval автоматически удаляет дочернюю сущность, если она больше не связана с родительской. Это происходит при удалении объекта из коллекции или обнулении ссылки. Механизм работает только для отношений «родитель–потомок». Он часто используется для строгого управления зависимыми сущностями. По смыслу это не то же самое, что CascadeType.REMOVE.
Orphan removal — это механизм, при котором JPA удаляет сущность, ставшую «сиротой», то есть утратившую связь с родителем.
@OneToMany(orphanRemoval = true)
private List<Item> items;
Удаление происходит, если:
объект удалён из коллекции
ссылка на родителя обнулена
order.getItems().remove(item);
Важно различать:
CascadeType.REMOVE → удаление при удалении родителя
orphanRemoval → удаление при разрыве связи
строгие агрегаты
зависимые сущности
модель «владелец — компонент»
orphanRemoval — мощный инструмент для управления зависимыми объектами. Он помогает поддерживать целостность данных, но требует аккуратного использования.