• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

질문이 있습니다.

22.09.03 14:28 작성 조회수 180

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이 프록시에서 실 객체로 바뀌니 이것을 위해 조인하였을 것 같은데 맞을까요?

답변 1

답변을 작성해보세요.

2

안녕하세요. 김형민님

JPA 기본편에 있는 경로 표현식 부분을 참고해주세요.

감사합니다.

김형민님의 프로필

김형민

질문자

2022.09.06

감사합니다.

결론은 명시적 조인을 하기위해서군요.

근데 Item이 실 객체로 바뀌는 시점은 join oi.item i 인가요 i.name 인가요.. 헷갈리네요

제 생각엔 join oi.item i 이때 일 것 같습니다.

 

안녕하세요. 형민님

Join oi.item i 라는 표현이 있으면 select에서도 i를 사용할 수 있게 됩니다.

감사합니다.