저번시간에 굉장한 수의 쿼리가 날아가던 현상을 페치조인으로 해결해보자…
아래는 예전에 배웠던 내용임…
먼저 리포지토리에 다음의 메서드를 만들자.
public List<Order> findAllWithMemberDelivery() {
}
그리고 다음과같은 jpql을 짜준다.
public List<Order> findAllWithMemberDelivery() {
return em.createQuery(
"select o from Order o" +
" join fetch o.member m" +
" join fetch o.delivery d", Order.class
).getResultList();
이는 member, delivery등을 join한 후에 한번에 다 select하는 방식임.
이 경우에는 지연로딩도 다 무시하고 값을 한번에 다 가져온다…
그리고 위의 메서드를 이용해 API에서 같은 로직을 작성해주면 된다.
@GetMapping("/api/v3/simple-orders")
public List<SimpleOrderDto> ordersV3() {
List<Order> orders = orderRepository.findAllWithMemberDelivery();
return orders.stream().map(SimpleOrderDto::new).collect(Collectors.toList());
}
⭐ 페치조인은 JPA에서 너무나 자주쓰이고, 그리고 반드시 필수적으로 쓰여야 하기 때문에 100%이해해야 한다.