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

gusdn85554님의 프로필 이미지

작성한 질문수

실전! Querydsl

querydsl에서의 값 타입 컬렉션

22.05.26 02:51 작성

·

834

1

영한님 서포터즈님들 안녕하세요

강의에서는 엔티티 끼리의 DTO 변환은 조인을 통해 쉽게 할 수 있는데, querydsl의 프로젝션을 사용해서 DTO를 변환하는 중에 값 타입 컬렉션은 어떻게 할 수 있는지 궁금해서 여쭤보게 됐습니다.

현재 재 코드입니다

Club.class

PetSizeType(Enum)

EligibleBreed

이제 querydsl을 이용해서 DTO를 변환시키면 not an entity 라는 에러가 발생합니다

일단 값 타입 컬렉션은 entity가 아니기 때문에 해당 에러 로그는 이해가 됩니다

그렇다면 값 타입 컬렉션은 조인도 할 수 없기 때문에 10개의 Club을 가져오려면 select 쿼리가 20개가 나가게 되는데, 이를 최적화하는 방법이 없을까요?

 

아래의 사진은 하나의 club을 조회할 때 나가는 쿼리입니다!

 

그리고 제 개인적인 생각으로는 실무에서도 Enum타입을 자주 사용할 것 같은데,, 같은 Enum Type을 저장하기 위해서 따로 엔티티를 만드는 편인가요??(값 타입 컬렉션을 사용하지 않는지 궁금합니다)

 

감사합니다

답변 3

1

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

2022. 06. 06. 19:00

안녕하세요. gusdn85554님

질문1, 질문2를 확인해보았습니다.

간단하게 답변을 드리자면, ElementCollection도 1:N 관계라 생각하시면 됩니다.

따라서 활용2편에 설명드린 내용으로 최적화해야 합니다.

활용2편을 복습해보시면 답을 찾으실 수 있을거에요.

그리고 DTO로 조회할 때는 1:N 관계의 데이터를 그대로 넣을 수 없습니다. 이 경우 조인한 다음에 필드의 값 하나하나를 직접 매핑해서 넣어주어야 합니다. 지금처럼 1:N 관계 자체를 넣으시면 안됩니다.

감사합니다.

 

0

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

2022. 05. 29. 22:44

안녕하세요 영한님 주말에 답변 감사드립니다

https://drive.google.com/file/d/13TVNk7HjfIfRNDqcPK3RnZ2IyTowL0ey/view?usp=sharing

해당 링크에서 pdf 파일에 설명이 들어있습니다

감사합니다

 

0

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

2022. 05. 29. 18:14

안녕하세요. gusdn85554님

전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

 

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요

 

추가로 다음 내용도 코멘트 부탁드립니다.

1. 실행 방법을 알려주세요.

2. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.

감사합니다.