Ответ
CascadeType в JPA определяет, какие операции жизненного цикла сущности должны автоматически распространяться (каскадироваться) на связанные сущности. Это позволяет управлять состоянием графа объектов без явного вызова операций для каждого связанного объекта.
Основные варианты CascadeType:
CascadeType.PERSIST– при сохранении родительской сущности сохраняются и все связанные сущности.CascadeType.MERGE– при слиянии (обновлении) родительской сущности обновляются и все связанные сущности.CascadeType.REMOVE– при удалении родительской сущности удаляются и все связанные сущности.CascadeType.REFRESHиCascadeType.DETACH– распространяют операции refresh и detach.CascadeType.ALL– включает все вышеперечисленные каскадные операции.
Практический пример:
@Entity
public class Parent {
@Id
@GeneratedValue
private Long id;
@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REMOVE})
private List<Child> children = new ArrayList<>();
// ...
}
В этом случае при вызове entityManager.persist(parent) будут автоматически сохранены все объекты Child из списка. Аналогично, при удалении parent будут удалены и все его children. Без указания каскада пришлось бы сохранять каждый Child отдельно.