목차
- JPA JPQL - Fetch Join
- JPA JPQL - Projection (Select)
- JPA JPQL (Java Persistence Query Language)
- JPA - 객체지향 쿼리 언어
N+1 문제란 ?
데이터 조회를 위해 한번의 쿼리가 발생하지만 연관관계에 의해 연관된 객체 모두를 가져오기 위해 N 번의 쿼리가 발생하는 문제
필요한 데이터 조회를 위해 한번의 Select 쿼리가 발생해 객체를 가져왔지만, 연관관계가 설정된 객체는 Lazy 설정 으로 인해 실제 값이 아닌 Proxy 객체 로 대체하는데 해당 객체에 접근할 경우 실제 데이터를 가져오기 위해 처음에 조회된 데이터 만큼 쿼리가 추가적으로 발생하는 문제
Fetch Join
Lazy 설정을 무시하고 연관된 객체를 한번에 가져온다.
- JPQL 에서는 N + 1 문제를 해결하기 위해
fetch join
을 제공한다. - fetch join 을 이용해 JPQL 을 작성하게 되면 Lazy 설정을 무시하고, Order 조회시 Member 객체와 Delivery 객체를 전부 다 가져온다.
public List<Order> findAllWithMemberDelivery(){ |