Каскадные операции
Cascade передаёт операцию связанным Entity
Иногда связанные объекты образуют единое целое с точки зрения жизненного цикла. Например, при сохранении нового заказа нужно одновременно сохранить созданные вместе с ним позиции. JPA позволяет явно указать, какие операции должны распространяться по связи.
@OneToMany(mappedBy = "order", cascade = CascadeType.PERSIST)
private List<OrderItem> items = new ArrayList<>();
Теперь persist(order) может распространить операцию PERSIST
на элементы коллекции items.
Без cascade связанные объекты не начинают автоматически участвовать в той же lifecycle-операции только потому, что на них есть ссылка.
Каскады выбираются по смыслу отношения
PERSIST— передать сохранение;MERGE— передать merge;REMOVE— передать удаление;REFRESHиDETACH— передать соответствующие lifecycle-операции;ALL— включить все перечисленные операции.
Не ставь CascadeType.ALL автоматически.
Особенно внимательно относись к
REMOVE: удаление одного объекта не всегда должно означать удаление связанного объекта, который используется где-то ещё.
Проверь себя
Разбор задания
Ментор знает решение и поможет тебе прийти к нему самостоятельно
Войди, чтобы использовать Ментора
Ментор учитывает текущую задачу и историю диалога.
Войти
Проверь важные нюансы и ответ после собственной попытки.
Войди, чтобы посмотреть решение
Решение и разбор доступны после авторизации.
Войти