실무에서 너무 자주쓰임 중요!
- SQL 조인의 종류가 아님
- JPQL에서 성능 최적화를 위해 제공하는 기능
- 연관된 엔티티나 컬렉션을 SQL 한번에 함께 조회( 한방 쿼리 )
- join fetch 명령어 사용
회원을 조회하면서 연관된 팀도 함께 조회(SQL 한번에)
SQL을 보면 회원 뿐만 아니라 팀(T.*) 도 함께 select 함
예시 ) 회원 1, 2는 팀 A / 회원3은 팀B 라고 가정한다.
1. 일반 조인을 사용했을 시
String query = "select m from Member m join m.team t";
List<Member> findMember = em.createQuery(query, Member.class).getResultList(); // 이때의 결과값은 프록시 데이터
이때 회원리스트를 뽑아 콘솔에 찍어봤을때 회원 1, 2는 팀이 같기 때문에 최초(회원1 검색)에만
DB에 접근해 검색 하고 두번째부터는 회원 1 검색 후 저장된 1차캐시에서 가져와 쓴다.
→ 따라서 회원 1, 2 의 팀 검색 쿼리(select)가 한번만 나감
이때 처음 member를 검색하는 쿼리까지 포함해서 총 3번의 select 쿼리문이 나간다.
2. 패치 조인을 사용했을 시
String query = "select m from Member m join fetch m.team";
List<Member> result = em.createQuery(query, Member.class).getResultList();
위에 쿼리문 처럼 패치조인을 사용하면 member와 연관되어있는 team엔티티를 따로 검색하지 않고 한번에 가져올 수 있다.
→ 한방쿼리로 조회가능!
'JAVA' 카테고리의 다른 글
[JAVA] AllArgsConstructor vs RequiredArgsConstructor (0) | 2022.02.10 |
---|---|
[JAVA] 쿼리 파라미터 남기기 (0) | 2022.01.20 |
[JAVA] JPA 조인과 서브쿼리 (0) | 2022.01.18 |
[JAVA] 프로젝션과 페이징 (0) | 2022.01.13 |
[JAVA] 값 타입 컬렉션 (0) | 2022.01.13 |