2건을 조회 했을 때 총 11번의 쿼리가 날아갔기 때문에 최적화 해보자.
repository
public List<Order> findAllWithItem() {
return em.createQuery("select o from Order o" +
" join fetch o.member m" +
" join fetch o.delivery d" +
" join fetch o.orderItems oi" +
" join fetch oi.item i", Order.class
).getResultList();
}
디비 입장에서는 당연하다.
문제는 우리가 의도 했던 것과 다른 결과가 나왔다.
심지어 레퍼런스까지 똑같다.
우리가 원하는 order를 알려줘야 한다. distinct를 이용해서!
public List<Order> findAllWithItem() {
return em.createQuery("select distinct o from Order o" +
" join fetch o.member m" +
" join fetch o.delivery d" +
" join fetch o.orderItems oi" +
" join fetch oi.item i", Order.class
).getResultList();
}
db의 distinct + 한가지 기능이 더 있다.
실제로 sql에 distinct를 넣어준다.