JPA
영속성전이와 고아객체
yanu
2023. 2. 20. 22:10
1. 영속성 전이
- CASECADE
- 특정엔티티를 영속 상태로 만들 때, 연관 된 엔티티도 영속상태로 하고 싶을 때
- 부모 엔티티를 저장할 때, 자식 엔티티까지 저장
- 매핑하는 것과는 상관없음, 영속화하는 편리함을 제공하는 것
- 옵션 : ALL, PERSIST, REMOVE
-
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL) private List<Child> childList = new ArrayList<>(); - 참조하는 곳이 하나인 경우에만 (소유자(부모엔티티)가 하나일 경우에만 사용)
2. 고아객체
- 부모 엔티티와 연관관계가 끊어진 자식엔티티를 자동으로 삭제
-
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true) private List<Child> childList = new ArrayList<>(); - orphanRemoval 을 사용시 list에서 remove하는 경우 delete 쿼리가 나가게 된다.
- 참조하는 곳이 하나인 경우에만 사용, 특정 엔티티가 개인 소유할 때 사용
3. 영속성전이 + 고아객체
- 스스로 생명주기를 관리하는 엔티티는 em.pesist()로 영속화, em.remove()로 제거
- 두 옵션을 모두 활성화하면 부모 엔티티를 통해서 자식의 생명주기를 관리할 수 있다.
- 도메인 주도 설계(DDD)의 Aggregate Root 개념을 구현할 때 유용
**참고
인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 기본편(김영한)