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();
}
fetch join
으로 다른 객체 모두 로딩된 상태 -> 지연 로딩 발생 Xpublic List<OrderSimpleQueryDto> findOrderDtos() {
return em.createQuery(
"select new
jpabook.jpashop.repository.order.simplequery.OrderSimpleQueryDto(o.id, m.name,
o.orderDate, o.status, d.address)" +
" from Order o" +
" join o.member m" +
" join o.delivery d", OrderSimpleQueryDto.class)
.getResultList();
}
native SQL
에 가까운 방식이다.방법 1
보다 응답 속도가 빠르다.repository
계층에 개입하기 때문에 계층 관계가 깨진다.방법 1
방법 2
뭐가 더 좋다고 단언할 수는 없다.
아래와 같은 순서로 최적화 방식을 선택하자.
방법 1
우선 선택 -> 대부분의 성능 이슈가 해결된다.방법 2
를 고려한다.native SQL
이나 스프링 JDBC Template
을 사용해서 SQL을 직접 사용한다.