JAVA

[JAVA] fetch join

응디 2022. 1. 18. 16:59

실무에서 너무 자주쓰임 중요!

  • 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