728x90
페치 조인의 특징과 한계
페치 조인 대상에는 별칭을 줄 수 없다.
- 하이버네이트는 가능, 가급적 사용 X

둘 이상의 컬렉션은 페치 조인할 수 없다.
- 1-다-다로 되기 때문에 데이터 적합성이 안 맞을 수가 있다.
컬렉션을 페치 조인하면 페이징 API(setFirstResult, setMaxResults)를 사용할 수 없다.
- 일대일, 다대일 같은 단일 값 연관 필드들은 페치 조인해도 페이징 가능
- 하이버네이트는 경고 로그를 남기고 메모리에서 페이징(매우 위험)


- 하이버 네이트 경고 에러가 뜬다
- why? 일대다 페치조인같은경우 데이터가 뻥튀기되어 기준을 어디로 페이징을 해야 할지 정할 수 없다.
해결 방법
- 방향을 뒤집어서 일대다를 다대일로 변경해서 해결
- BatchSize를 사용해서 in 절로 여러 개를 가지고 와서 해결



- DTO로 매핑해서 뽑는다.
페치조인 특징
- 연관된 엔티티들을 SQL 한 번으로 조회 - 성능 최적화
- 엔티티에 직접 적용하는 글로벌 로딩 전략보다 우선함
- @OneToMany(fetch = FetchType.LAZY) //글로벌 로딩 전략
- 실무에서 글로벌 로딩 전략은 모두 지연 로딩
- 최적화가 필요한 곳은 페치 조인 적용
정리
- 모든 것을 페치 조인으로 해결할 수는 없음
- 페치 조인은 객체 그래프를 유지할 때 사용하면 효과적
- 여러 테이블을 조인해서 엔티티가 가진 모양이 아닌 전혀 다른 결과를 내야 하면, 페치 조인보다는 일반 조인을 사용하고 필요 한 데이터들만 조회해서 DTO로 반환하는 것이 효과적
728x90
'자바 ORM 표준 JPA 프로그래밍(인프런)' 카테고리의 다른 글
| Ch11. 객체지향 쿼리 언어2(중급 문법) - 엔티티 직접 사용 (0) | 2021.12.18 |
|---|---|
| Ch11. 객체지향 쿼리 언어2(중급 문법) - 다형성 쿼리 (0) | 2021.12.18 |
| Ch11. 객체지향 쿼리 언어2(중급 문법) - 페치 조인(기본) (0) | 2021.12.18 |
| Ch11. 객체지향 쿼리 언어2(중급 문법) - 경로 표현식 (0) | 2021.12.18 |
| Ch10. 객체지향 쿼리 언어1(기본 문법) - JPQL 함수 (0) | 2021.12.17 |