영속성 전이란?
일례로 부모 엔티티를 저장할 때, 자식 엔티티도 함께 저장하는 경우가 해당된다.
특정 엔티티를 영속 상태로 만들 때, 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용하는 옵션이다.
📔사용방법
- parent persist 시 child도 함께 persist 된다.
- 즉 특정 엔티티를 영속상태로 만들 때, 영속성을 전이하여, 이를 참조하는 엔티티 역시 DB에 반영.
- child 엔티티와 다른 엔티티에 대한 참조가 여러개 엮여 있을 경우에는 사용해선 안된다.
- 단일 엔티티에 종속적인 경우에만 사용하자
🐿️ 고아 객체
- 고아 객체 제거 : 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제하는 옵션
- orpharRemoval = true를 사용하여 적용한다
주의점
- 참조하는 곳이 반드시 하나일 때 사용해야한다. 다른 엔티티와 연관관계가 있을 경우 큰 문제가 발생할 수 있다.
- 즉, 특정 엔티티가 개인소유하는 경우 사용하자
- CascadeType.REMOVE와 비슷하게 동작
- parent가 삭제되는 경우, 종속된 child도 모두 삭제된다.
영속성 전이와 고아객체 : CASCADE + orphanRemoval
- 스스로 생명주기를 관리하는 엔티티는 em.persist()로 영속화하고, em.remove()로 제거한다.
- 하지만 두 옵션을 켜게 되는 경우 부모엔티티를 통해서 자식엔티티의 영속성을 관리할 수 있다.
- 자식에 대한 별다른 접근 없이도, 부모엔티티를 통해 자식엔티티의 생명주기를 관리할 수 있다는 것이다.
- 도메인 주도 개발 (DDD)의 Aggregate Root개념을 구현할 때 유용하다.
- Repository는 Aggregate Root만을 통해 접근한다