인프런 커뮤니티 질문&답변

이승수님의 프로필 이미지
이승수

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

주문 조회 V4: JPA에서 DTO 직접 조회

엔티티 직접 사용 관련 질문입니다.

작성

·

303

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
안녕하세요 강의를 복습하다가 질문이 생겨서요

"select new jpabook.jpashop.repository.order.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)

다음 소스를 보면 oi.order.id = :orderId 부분에서

예전 강의 내용에서 jpql에서 엔티티를 직접 사용하면 SQL에서 해당 엔티티의 기본 키 값을 사용한다는 내용이 생각나서 oi.order = :orderId로 수정했더니 정상적으로 동작하지 않더라구요. 혹시 다른 내용인걸까요?

답변 1

0

안녕하세요, 이승수 님. 공식 서포터즈 y2gcoder 입니다.

영한님께서 언급하신 부분을 말씀해주시면 좀 더 정확한 답변을 드릴 수 있을 것 같습니다!

말씀해주신 부분만 가지고 제가 조심스럽게 판단해본다면, 아마도 

join oi.item i

이런 식으로 JPQL을 짜서 DB로 요청을 보낸다면, SQL로 보낼 때 해당 엔티티의 기본 키 값을 가지고 조인하는 것으로 변환되는 것을 언급하시지 않았나 싶습니다 :)

그리고 같은 맥락으로

where oi.order = :order

로 바꾸신 뒤, 직접 Order 객체를 넘겨보시면 SQL에서 orderItem의 외래키와 order의 기본키를 비교하는 것으로 변환되어 쿼리가 날아갈 것이라 예상합니다.

감사합니다.

이승수님의 프로필 이미지
이승수

작성한 질문수

질문하기