프로젝트 git url | github.com/rtef23/JpaStudy |
필요 | 1. docker 2. docker-compose |
프로젝트 정보 | mysql : 5.7 - docker image java : 1.8 |
한계
- 페치 조인 대상에는 별칭을 줄 수 없다.
(Hibernate는 가능하지만 가급적 사용하지 않는 것을 권고)
여러 depth를 타고 Fetch Join을 하는 경우에는 별칭을 주는 경우도 있다.
//JPQL
SELECT t
FROM Team t
JOIN FETCH t.members m //별칭을 주지 않는 것이 좋다.
WHERE m.age > 10
- 둘 이상의 컬렉션은 페치 조인 할 수 없다.
- 컬렉션을 페치 조인하면 페이징 API(setFirstResult, setMaxResults)를 사용할 수 없다.
- 일대일, 다대일 같은 단일 값 연관 필드들은 페치 조인해도 페이징 가능
- 하이버네이트의 경우, 경고 로그를 남기고 메모리에서 페이징 처리를 수행한다.(OOM 위험)
- @BatchSize 어노테이션을 이용하여 연관된 테이블에서 관련이 있는 데이터들만 조회하도록 하여
N + 1 문제를 어느정도 해소가능하다.
- 여러 테이블을 조인해서 엔티티가 가진 모양이 아닌 전혀 다른 결과를 내야 하면,
페치 조인보다는 일반 조인을 사용하고 필요한 데이터들만 조회해서
DTO로 반환하는 것이 효과적
'JPA' 카테고리의 다른 글
[JPA] 28. 기타(다형성 쿼리, 엔티티 직접 사용, Named 쿼리, 벌크 연산) (0) | 2021.02.16 |
---|---|
[JPA] 26. Fetch 조인 - 기본 (0) | 2021.02.11 |
[JPA] 25. 경로표현식 (0) | 2021.02.11 |
[JPA] 24. JPQL - 타입 표현, 기타식 (0) | 2021.01.31 |
[JPA] 23. JPQL - 조인, 서브 쿼리 (0) | 2021.01.31 |