JPA/JPQL

fetch join

lovineff 2020. 6. 9. 10:50

최적화가 필요하면 사용

SQL 조인 종류가 아님

연관된 엔티티나 컬렉션을 SQL 한번에 함께 조회하는 기능

JPQL 에서 최적화가 필요한 곳에서 사용함

join fetch 명령어 사용

지연 로딩으로 설정되어있어도 fetch join이 우선임

쿼리는 inner join으로 생성되나, entity 객체에 from 절의 모든 객체가 자동으로 담기게 된다.

inner join은 from 절의 모든 객체가 자동 세팅이 안된다.

String query = "select m from Member m join fetch Team t on t.id = m.team.id";
List<Member> resultList = em.createQuery(query, Member.class).getResultList(); // 정상 실행되며 Member 내 Team도 자동 매칭됨

String query = "select m, t from Member m inner join Team t on t.id = m.team.id";
List<Member> resultList = em.createQuery(query, Member.class).getResultList(); // 오류 발생

조인 대상에는 별칭을 줄 수 없다.

둘 이상의 컬렉션은 페치 조인할 수 없다.

페치 조인시 페이징 API를 사용하면 안된다.

일대일, 다대일 같은 단일 값 연관 필드들은 페치 조인해도 페이징 가능.

쿼리에서 페이징 처리를 안하고 모든 데이터를 메모리에 불러온 이후에 페이징 처리를 함.

객체 그래프를 유지할 떄 사용하면 효과적임

여러 테이블을 조회하여 엔티티가 가진 모양이 아닌 다른 결과를 내야 하면, 일반 조인을 사용하고 필요한 데이터만 조회해서 DTO로 반환하는게 효과적임.

'JPA > JPQL' 카테고리의 다른 글

네이티브 쿼리  (0) 2020.06.09
조회 후 수정  (0) 2020.06.09
Named 쿼리  (0) 2020.06.09
벌크 연산  (0) 2020.06.09
서브 쿼리  (0) 2020.06.09