[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개념
을 구현할 때 유용