Fetch Join(3)
-
[Spring] API - 컬렉션 조회(1 : N)
일대다 관계(One To Many)에서 조회하는 방법과 최적화하는 방법을 알아보자! toOne 관계와는 다르게 주의할 점이 많다. V1. 엔티티 직접 노출 V2. 엔티티를 조회해서 DTO로 변환하기 V3. 엔티티를 조회해서 DTO로 변환(fetch join 사용) V4. JPA에서 DTO로 바로 조회(1+N 쿼리) V5. JPA에서 DTO로 바로 조회(최적화로 1+1 쿼리) V6. JPA에서 DTO로 바로 조회(플랫 데이터 1쿼리) 이번 포스팅에서는 V3. 엔티티를 조회해서 DTO로 변환(fetch join 사용) 까지 알아보고, 다음 포스팅에서는 V6. JPA에서 DTO로 바로 조회(플랫 데이터 1쿼리)다루고있다. V1. 엔티티 직접 노출 먼저 Order와 OrderItem은 1:N의 관계이다. Ord..
2022.04.17 -
JPQL: fetch join - 컬렉션 페치 조인, 페치 조인 특징과 한계, 페이징
컬렉션 페치 조인(데이터 뻥튀기 조심하라) 일대다 관계를 가정해보자. 현재 팀A에 멤버가 두명 속해있다. 이때 테이블을 조인하면 테이블이 아래와 같아진다. 따라서 DB에서 결과가 두줄이 날라온다... SQL을 아는 사람이라면 DISTINCT 요소로 중복을 제거할 수 있을 것이라는 생각이 들 것이다. 근데 SQL의 DISTINCT는 컬럼의 모든 값이 일치해야 중복으로 처리되어 제거된다. 이 경우 Member의 Id와 Name이 다르다. 하지만 JPQL의 DISTINCT는 추가 기능을 제공한다. SQL에 DISTINCT를 추가할 뿐만 아니라 애플리케이션에서 엔티티 중복을 제거한다. 따라서 JPQL에서는 같은 식별자를 가진 Team 엔티티를 퍼올릴때 중복을 제거한다. 페치 조인과 일반 조인의 차이 "selec..
2022.04.04 -
JPQL: fetch join - 페치 조인, N+1의 문제
들어가기 앞서서 페이조인은.. • SQL 조인 종류가 아니다 • JPQL에서 성능 최적화를 위해 제공하는 기능이다. • 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능이다 • join fetch 명령어로 사용하면 된다 • [ LEFT [OUTER] | INNER ] JOIN FETCH 조인 경로를 지정할 수 있다. 그럼 시작~! 다음과 같은 상황이 있다고 가정하다. 회원과 팀 엔티티가 있는 상황에서, 회원을 조회하면서 연관된 팀도 함께 조회하고 싶다. 회원도 궁금하고 그들의 소속 팀도 함께 보고싶다!!!! 이때 사용하는 것이 페치 조인이다. select m from Member m join fetch m.team select 프로젝션에 m 하나인데, 실제 SQL은 select M.* T.* ..
2022.04.04