[3] JPA 프로그래밍 (10) - 영속성 전이(CASCADE) / 고아 객체(orphanRemoval)

영속성 전이 ?
[ 설명 ]

연관관계가 있는 엔티티간 영속성을 전이시키는 것
Parent를 em.persist()하면 Child에 대한 em.persist()도 자동으로 수행됨
연관관계 매핑과는 상관이 없음
--> 연관된 엔티티를 함께 영속화 하는 편리함을 제공할 뿐!
- 종류
ALL : 모든 옵션
PERSIST : 영속성
REMOVE : 삭제
- 기타(
MERGE / REFRESH / DETACH)
[ 사용 ]

연관관계 매핑시 포함을 하는 주체인 엔티티에 cascade옵션 추가
고아 객체 ?
[ 설명 ]
- 부모 엔티티와 연관관계가 끊어진
자식 엔티티를 자동 삭제
orphanRemoval 옵션으로 사용
DELETE query가 수행됨
@OneToOne / @OneToMany 에서만 가능
- 부모 객체를 제거하면 자식 객체는 자동으로 제거된다
--> CascadeType.REMOVE 처럼 동작!
- 주의
- 참조가 제거된 엔티티는 다른 곳에서 참조하지 않는 고아 객체로 보고 삭제됨
참조하는 곳이 하나일 때 사용해야함
--> 여러 곳에서 참조하는 경우 로직이 꼬일 수 있음
- 특정 엔티티가
개인 소유할 때 사용
--> 특정 하나의 엔티티가 소유한 관계에서 사용
[ 사용 ]

영속성전이 + 고아객체의 생명주기
CascadeType.ALL + orphanRemoval=true
: 부모 엔티티로 자식 엔티티의 생명주기를 관리한다는 것을 의미함
도메인 주도 설계(DDD)의 Aggregate Root개념을 구현할 때 유용