Section 1. 영속성 전이 (CASCADE)
1. 영속성 전이 (CASCADE)
" cascade : 폭포, 폭포처럼 흐르다 " 라는 사전적 의미를 바탕으로 엔티티의 상태를 변경할 때 해당 엔티티와 연관된 엔티티의 상태 변화를 전파시키는 옵션
- 부모는 One 에 해당하는 Entity
- 자식은 Many 에 해당하는 Entity
- 부모 Entity 가 존재해야 자식 Entity 가 부모를 참조하며 생성될 수 있음
2. CASCADE 종류
CASCADE | 설명 |
---|
PERSIST | 부모가 영속화될 때 자식도 영속화 |
MERGE | 부모가 병합될 때 자식도 병합 |
REMOVE | 부모가 삭제될 때 자식도 삭제 |
REFRESH | 부모가 refresh 되면 자식도 refresh |
DETACH | 부모가 detach 되면 자식도 detach |
ALL | 부모의 상태 변화를 자식에게 모두 전이 |
3. 주문 영속성 전이
- 부모인 Order Entity 가 저장될 때, 자식인 OrderItem 또한 저장되는 영속성 전이
- OrderRepository 생성
- 부모 Order Entity CASCADE 지정
4. 주문 영속성 전이 테스트
- 주문 영속성 전이 테스트 클래스 생성 및 DI
- 주문 영속성 전이 테스트
- Order 객체 저장 시, 참조되는 Order_Item 객체 저장
- 3개의 Item 생성
- orders 생성
- order_item 생성
- order 객체 조회
Section 2. 고아객체 (ORPHAN)
1. 고아객체 (ORPHAN)
부모 엔티티와 연관 관계가 끊어진 자식 엔티티
- 자식의 엔티티를 다른 엔티티가 참조하고 있다면 제거 X
2. 고아객체 제거
- 부모 Entity 에 orphanRemoval = true 설정
3. 고아객체 제거 테스트
- 부모 Entity 인 Order 객체 생성
- 고아 객체 제거
- Order 객체가 관리하는 OrderItem 리스트에서 0번째 요소의 id를 추출
- 0번째 요소를 제거한 뒤, OrderItem 조회 (id 이용)
- 조회 결과 Optional.empty() 라면 제대로 제거된 것이므로 테스트 통과
- order_item delete
4. CASCADE.REMOVE vs 고아객체 제거
- CASCADE.REMOVE - 부모 Entity 가 삭제될 때 같이 삭제되는 것
- 고아객체 제거 - 부모 Entity 와의 연관관계가 끊어질 때 삭제되는 것