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

유호빈님의 프로필 이미지
유호빈

작성한 질문수

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

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

조회시 count 쿼리에 대하여

해결된 질문

작성

·

613

0

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

[질문 내용]
안녕하세요. 제가 영한님 강의를 보고 혼자 간단한 프로젝트를 진행해보고 있는데, Order 조회시 OrderItem과 같은 List의 갯수를 알고 싶어 count 쿼리를 사용하려고 합니다.

이때, 1. JPA에서 DTO 직접 조회가 아닌 fetch join 하여 엔티티로 조회한 이후에 count 값 (갯수)를 얻을 수 있을까요??


그리고 2. 컬렉션 페치조인은 1개만 가능하다 하였는데, 예를 들어 Order에 OrderItem 과 List가 하나더 추가 되었을 때, 각 리스트의 count 갯수를 알고싶으면 DTO직접 조회에서 count 쿼리를 사용하는게 맞을까요?

항상 강의 잘 듣고있습니다. 감사합니다

답변 1

1

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

안녕하세요. 유호빈님

  1. fetch join은 엔티티를 대상으로 조회할 때 사용하는 기능입니다 따라서 count를 조회하고 싶다면 단일 값으로 조회하거나 DTO로 조회하셔야 합니다.

  2. 네 이런 경우에는 DTO를 사용하시는 것이 맞습니다.

감사합니다.

 

유호빈님의 프로필 이미지
유호빈
질문자

답변 감사합니다. 항상 좋은 수업 잘 듣고있습니다.

유호빈님의 프로필 이미지
유호빈
질문자

image

제가 질문한 2번에 따라서 다음과 같이 쿼리문을 작성하였는데, 지금 사진처럼 Post라는 엔티티에 join을 6개를 해서 값을 가져오고 있습니다.
이렇게 join을 많이 사용해서 값을 가져오는 게 맞는지 궁금해서 질문을 드립니다. 지금처럼 join을 많이 사용한다면 엔티티 도메인 설계가 잘못되었기 때문일까요???

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

안녕하세요. 유호빈님

여러번 조인하는 것은 괜찮습니다.

JPQL을 DTO로 조회하는 것은 SQL문을 작성하는 것과 거의 같기 때문에 먼저 결과로 만들고 싶은 SQL문을 작성하고, 그 결과가 기대한 것과 맞다면 그 결과를 JPQL또는 네이티브 SQL로 작성한 다음 DTO로 받아서 사용하시면 됩니다.

감사합니다.

유호빈님의 프로필 이미지
유호빈
질문자

네 감사합니다!!

유호빈님의 프로필 이미지
유호빈

작성한 질문수

질문하기