JPA - CASCADE, ORPHAN

Codren·2021년 9월 27일
0

Spring Boot 쇼핑몰

목록 보기
16/32

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 와의 연관관계가 끊어질 때 삭제되는 것

0개의 댓글