- 영속성(cascade) 전이에 대해 파악한다.
- 고아 객체에 대해 파악한다.
- 특정 엔티티를 영속화 할 때, 연관 엔티티도 함께 영속화하고자 할 때 사용한다.
영속성을 전이하지 않으면persist()
를 세 번 호출해야하지만, 영속성 전이를 통해persist(parent)
만으로 child또한 영속화할 수 있게된다.
cascade
는 영속화의 편리함만을 제공할 뿐, 연관관계 매핑과 전혀 관련없다.
cascade 종류
- ALL : 아래의 모든 변화를 전이한다.
- PERSIST : 연관 엔티티를 영속화한다.
- REMOVE : 연관 엔티티를 삭제한다.
- MERGE : 준영속 상태의 연관 엔티티를 영속화한다.
- REFRESH : 연관 엔티티를 refresh한다.
- refresh : 1차 캐시와 DB의 상태를 동기화
- DETACH : 연관 엔티티를 준영속 상태로 전환한다.
영속성 전이 조건
영속성 전이 설정은 매우 신중히 해야하는데, 일반적으로 아래 규칙에 유의하여 설정한다.
1. 자식 엔티티를 관리하는 부모가 단 하나만 존재한다.
즉, 연관관계가 유일할 때 사용한다.
2. 엔티티의 생명 주기가 동일할 때 사용한다.
즉, 부모가 생성될 때 자식도 생성되고, 부모가 사라지면 자식도 사라질 때 사용한다.
- 고아 객체 : 부모 엔티티와 연관관계가 끊어진 자식 엔티티
orphanRemoval = true
설정을 통해 고아 객체를 자동으로 삭제한다.
고아 객체 조건
영속성 전이 조건과 동일하다.
- 추가적으로,
@OneToOne
@OneToMany
에서만 사용 가능하다.