Java/JPA
영속성 전이 : CASCADE
amungstudy
2023. 11. 17. 21:40
영속성 전이는 엔티티를 영속화할 때 연관된 엔티티도 함께 영속화하는 편리함을 제공해준다
(ex.부모 엔티티 저장시에 자식 엔티티도 함께 저장)
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
private List<Child> childList = new ArrayList<>();
cascade 속성을 사용할 수 있는 경우:
하나의 부모가 자식들을 관리할때,
ex)parent 말고 member가 child를 알게되면 쓰면 안된다.... 단일 엔티티에 완전히 종속적일때(소유자가 하나일때), life cycle 동일할때(등록,삭제)
ex 게시판-첨부파일 경로(다른 엔티티랑 관련 있으면 쓰면 안됨. 소유자가 하나일때만 사용)
고아객체제거 : 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제
orphanRemoval = true
Parent parent1 = em.find(Parent.class, id);
parent1.getChildren().remove(0);
//자식 엔티티를 컬렉션에서 제거
고아 객체제거도 참조하는 곳이 하나일 때 사용해야함. (특정 엔티티가 개인 소유하는 경우)
@OneToOne, @OneToMany만 가능
* 부모 엔티티 삭제 시CascadeType.REMOVE
와 orphanRemoval = true
는 부모 엔티티를 삭제하면 자식 엔티티도 삭제한다.
- 부모 엔티티에서 자식 엔티티를 제거하면
CascadeType.REMOVE
는 자식 엔티티가 그대로 남아 있다.orphanRemoval = true
는 자식 엔티티를 제거한다.
두 경우 모두 자식 엔티티에 딱 하나의 부모 엔티티가 연관되어 있는 경우에만 사용해야한다.
영속성 전이 + 고아 객체
두 옵션을 모두 활성화하면 부모 엔티티를 통해서 자식의 생명주기를 관리할 수 있다.
도메인 주도 설계(DDD)의 Aggregate Root개념을 구현할 때 유용