인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

Inflearn Community Q&A

bulmandu's profile image
bulmandu

asked

Real-world! Spring Boot and JPA Utilization 2 - API Development and Performance Optimization

Order Lookup V4: Direct DTO Lookup in JPA

jpql 페치조인

Written on

·

344

0

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

Answer 1

0

yh님의 프로필 이미지
yh
Instructor

안녕하세요. adamku님

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

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

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

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

감사합니다.

bulmandu님의 프로필 이미지
bulmandu
Questioner

 

아 선생님 

저의 질문은 페치조인할때 원하는 값들만 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 에서(페치조인) 그냥 바로 원하는 데이터를 직접 선택해 네트워크 용량을 최적화 하고싶습니다( 그러나 오류 발생??)
yh님의 프로필 이미지
yh
Instructor

안녕하세요. adamku님

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

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

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

감사합니다.

bulmandu's profile image
bulmandu

asked

Ask a question