주의사항
- 지연 로딩만 사용하는 게 좋음
- 즉시 로딩을 적용하면 예상하지 못한 SQL이 발생할 수 있음 (프로그래밍은 내가 예상한 대로만 돌아가야 함)
- 즉시 로딩은 JPQL에서 N+1 문제를 일으킨다. => 그에 반해 fetch join은 N+1 문제를 일으키지 않음.
- @ManyToOne, @OneToOne은 기본이 즉시 로딩(EAGER) => LAZY로 설정 필요
- @OneToMany, @ManyToMany는 기본이 지연 로딩(LAZY)
영속성 전이
특정 엔티티를 영속 상태로 만들 때, 연관된 엔티티도 함께 영속 상태로 만들고자 할 때 사용
- 영속성 전이는 연관관계와는 관계 X
- 연관된 엔티티의 영속 상태 관리 편이성을 위한 기능
저장
@OneToMany(mappedBy="parent", cascade=CascadeType.PERSIST)
CASCADE 종류
- ALL: 모두 적용
- PERSIST: 영속
- REMOVE: 삭제
고아 객체
부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제 하고자 할 때 사용
- 참조하는 곳이 하나일 때만 사용하기
- 특정 엔티티가 개인 소유할 때 사용하기
- @OneToOne, @OneToMany만 가능
영속성 전이 + 고아 객체
- CascadeType.ALL + orphanRemoval=true
- 두 옵션을 모두 활성화 하면 부모 엔티티를 통해서 자식의 생명주기를 관리할 수 있다.