작성
·
231
0
private List<OrderItemQueryDto> findOrderItems(Long orderId) {
return em.createQuery(
"select new jpabook.jpashop.repository.query.OrderItemQueryDto(oi.order.id, i.name, oi.orderPrice, oi.count)" +
" from OrderItem oi" +
" join oi.item i" + //이걸 왜 하는거지 => 실 객체바꿀라고?
" where oi.order.id = :orderId", OrderItemQueryDto.class
).setParameter("orderId", orderId).getResultList();
}
위 코드에서 "join oi.item" 하는 이유가 궁금합니다.
OrderItem엔 Item이 있으니 i.name 대신 oi.item.name하여도 될 것 같은데 굳이 Item도 조인하는 이유가 있을까요?
제가 생각한 결과로는 Item을 조인하여 i.name할 때 Item이 프록시에서 실 객체로 바뀌니 이것을 위해 조인하였을 것 같은데 맞을까요?
감사합니다.
결론은 명시적 조인을 하기위해서군요.
근데 Item이 실 객체로 바뀌는 시점은 join oi.item i 인가요 i.name 인가요.. 헷갈리네요
제 생각엔 join oi.item i 이때 일 것 같습니다.