JPA

페치 조인과 일반 조인의 차이(feat. 연관된 엔티티 함께 조회)

쿠카이든 2022. 6. 15. 18:01
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