728x90
- 페치 조인을 사용하지 않고 조인만 사용하면 어떻게 될까
select t -- 내부 조인 JPQL
from Team t join t.members m
where t.name = '팀A'
SELECT --실행된 SQL
T.*
FROM TEAM T
INNER JOIN MEMBER M ON T.ID=M.TEAM_ID
WHERE T.NAME = '팀A'
- JPQL에서 팀과 회원 컬렉션을 조인했으므로 회원 컬렉션도 함께 조회할 것으로 기대해선 안 된다.
- 실행된 SQL의 SELECT 절을 보면 팀만 조회하고 조인했던 회원은 전혀 조회하지 않는다.
- JPQL은 결과를 반환할 때 연관관계까지 고려하지 않는다. 단지 SELECT 절에 지정한 엔티티만 조회할 뿐이다. 따라서 팀 엔티티만 조회하고 연관된 회원 컬렉션은 조회하지 않는다.
- 반면에 페치 조인을 사용하면 연관된 엔티티도 함께 조회한다.
select t -- 페치 조인 JPQL
from Team t join fetch t.members
where t.name = '팀A'
SELECT -- 실행된 SQL
T.*, M.*
FROM TEAM T
INNER JOIN MEMBER M ON T.ID=M.TEAM_ID
WHERE T.NAME = '팀A'
- 바로 위의 실행된 SQL을 보면 SELECT T.*, M.*로 팀과 회원을 함께 조회한 것을 알 수 있다.
출처 : JAVA 표준 ORM JPA 프로그래밍 (저자 김영한)
728x90
'JPA' 카테고리의 다른 글
QueryDSL(Criteria 보다 더 나은 JPQL 빌더) (0) | 2022.06.16 |
---|---|
Criteria 기초(feat. JPQL의 빌더 클래스) (0) | 2022.06.16 |
페이징 API (0) | 2022.06.15 |
프로젝션 NEW 명령어 (0) | 2022.06.14 |
객체지향 쿼리 소개(feat. JPQL) (0) | 2022.06.14 |