cascade, orphanRemoval

2021. 1. 20. 16:25JPA/JPA

영속성 전이 cascade

  • 특정 엔티티를 영속 상태로 만들거나 삭제 상태로 만들때, 그와 관련된 엔티티도 함께 영속 상태나 삭제 상태로 만들고 싶을때 사용.
  • 연관관계의 주인이 누구인지와는 상관없이 사용.
  • 참조하는 곳이 한곳일때, 특정 엔티티가 개인 소유할 때 사용.
@OneToMany(mappedBy="parent", cascade=CascadeType.PERSIST)

CascadeType의 종류

  1. ALL: 모두 적용
  2. PERSIST: 영속
  3. REMOVE: 삭제
  4. MERGE: 병합
  5. REFRESH: REFRESH
  6. DETACH: DETACH

고아 객체 삭제 orphanRemoval

@OneToMany(mappedBy="parent", orphanRemoval=true)
  • 부모 컬렉션에서 자식 엔티티 삭제하면 DELETE 쿼리 생성됨.
  • 참조하는 곳이 한곳일때, 특정 엔티티가 개인 소유할 때 사용.
  • @OneToOne, @OneToMany만 가능
  • 연관관계의 주인이 누구인지와는 상관없이 사용.

영속성 전이 + 고아 객체 삭제 = 생명 주기 동기화

  • CascadeType.All + orphanRemoval=true
  • 두 옵션을 모두 활성화 하면 부모 엔티티를 통해서 자식의 생명 주기를 관리할 수 있음 
  • 도메인 주도 설계(DDD)의 Aggregate Root개념을 구현할 때 유용

'JPA > JPA' 카테고리의 다른 글

준영속상태의 엔티티를 변경할 때 변경감지와 merge()  (0) 2021.01.29
임베디드 타입, @Embeddable, @Embedded  (0) 2021.01.21
지연로딩과 즉시로딩  (0) 2021.01.20
상속관계 매핑  (0) 2021.01.19
연관관계 매핑  (0) 2021.01.19