애그리거트의 영속성 전파
애그리거트가 완전한 상태여야 한다는 것은 애그리거트 루트를 조회할 때뿐만 아니라 저장하고 삭제할 때도 하나로 처리해야 한다.
저장 메서드에서는 애그리거트 루트만 저장하면 안되고 애그리거트에 속한 모든 객체를 저장해야 한다.
삭제 메서드는 애그리거트 루트뿐만 아니라 애그리거트에 속한 모든 객체를 삭제해야 한다.
@Embeddable 매핑 타입의 경우 함께 저장되고 삭제되지만 @Entity 타입에 대한 매핑은 cascade 속성을 사용해서 저장과 삭제 시 함께 처리되도록 설정해야 한다.
// Entity 타입 매핑은 cascade 속성 설정)
@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REMOVE}, orphanRemoval = ture)
@JoinCoulmn(name = "product_id")
@OrderColumn(name = "list_idx")
private List<Image> images = new ArrayList<>();