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

adamku님의 프로필 이미지
adamku

작성한 질문수

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

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

jpql 페치조인

작성

·

300

0

안녕하세요 영한님 감사합니다
 
첫번째 :
 
new 명령어를 사용해서 JPQL의 결과를 DTO로 즉시 반환하면
SELECT 절에서 원하는 데이터를 직접 선택하므로 네트워크 용량을 최적화 할수 있다고 해주셨는데
 
뒤로 돌아가서
 
JPQL 페치조인도 마찬가지로 원하는 데이터를 직접 선택해 보고싶어서
 
 
 
이런식으로는 못하나요 ? 테스틀 해봤는데 에러가 나서 질문드립니다.
 
========================================
두번쨰 : 18:40 설명은 xToOne 관계에선 페치조인이 필요 없다고 이해 하면 되는거죠 ???

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. adamku님

new 명령어와 fetch join은 함께 사용할 수 없습니다.

이때는 일반 조인을 사용하시면 됩니다.

두번쨰 : 18:40 설명은 xToOne 관계에선 페치조인이 필요 없다고 이해 하면 되는거죠 ???

-> 네 이 상황에서도 new를 사용하기 때문에 페치조인이 안됩니다.

감사합니다.

adamku님의 프로필 이미지
adamku
질문자

 

아 선생님 

저의 질문은 페치조인할때 원하는 값들만 select 할수 없나요 ???

저 위의 사진을 보시면 select 절에 원하는 값만 나열했는데  에러가 나서 질문했습니다..

 

원래 소스는 아래와 같습니다 

아래는 모두다 select 하는것이구요

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();
}


 

저의 질문 의도는 이와 같습니다.

new 명령어를 사용해서 JPQL의 결과를 DTO로 즉시 반환하면
SELECT 절에서 원하는 데이터를 직접 선택하므로 네트워크 용량을 최적화 할수 있다.
 
페치조인에서 바로 원하는 데이터는 못가져오나요 ?? 질문의 첫번째 사진처럼?
--> JPQL 에서(페치조인) 그냥 바로 원하는 데이터를 직접 선택해 네트워크 용량을 최적화 하고싶습니다( 그러나 오류 발생??)
김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. adamku님

제가 추가 질문을 놓쳐서 답변이 늦었습니다.

이 경우에는 페치 조인 대신에 일반 조인을 사용하시면 됩니다^^

페치 조인은 엔티티를 온전히 그대로 조회할 때만 사용하실 수 있습니다. 원하는 데이터를 지금처럼 찍어서 조회하려면 일반 조인을 사용하시면 됩니다.

감사합니다.

adamku님의 프로필 이미지
adamku

작성한 질문수

질문하기