강의

멘토링

로드맵

Inflearn brand logo image

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

lsj59285님의 프로필 이미지
lsj59285

작성한 질문수

실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)

39강. Querydsl 사용하기 - 두 번째 방법

이 질문이 왜 없는지 이해가 안 되지만 문제 인식 및 해결 방법 남깁니다.

작성

·

96

·

수정됨

1

getStats() 안에 쿼리 작성할 때, book에서 id와 name은 불러와지는데, type이 불러지지 않습니다. QBook 클래스에서 확인해보니 final type만 없더군요. 찾아보니 이유는 이러합니다.

"Kotlin에서 type은 리플렉션/메타프로그래밍에서 자주 사용되는 예약 필드명이고, QueryDSL이 Q 클래스 생성 시 내부적으로 getType()을 쓰기 때문에 필드명 충돌이 발생했을 가능성이 높아 생성되지 않을 수 있습니다. 이러한 경우 ./gradlew clean kaptKotlin 명령어로 재빌드 한 후 Q 클래스를 다시 생성하거나 type 명칭을 bookType으로 수정하여 해결할 수 있습니다."

저는 ./gradlew clean kaptKotlin로 재빌드하니 해결됐습니다.

 

답변 2

0

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요! lsj59285님! 🙂 좋은 공유해주셔서 감사합니다.

몇 가지 자료를 더 살펴보느라 답변이 살짝 늦었는데요..! 제가 사용한 환경에서는 Kotlin Entity에 type 이라는 이름을 가진 필드가 있어도 (Enum이라 한다면..) 아래와 같은 QClass 내부의 type 필드가 잘 생겼습니다. 즉, type 이라는 이름만 사용해도 QClass를 통해 불러올 수 있습니다.

public final EnumPath<XXXType> type = createEnum("type", XXXType.class);

관련해서 검색도 해보고 제가 작업중인 여러 프로젝트도 확인해보았으나, type 이라는 필드를 그대로 사용하는데는 크게 어려움이 없었습니다.

혹시나 버전이나 환경에 따라 달라질 수도 있으니 참고만 해주시면 감사드리겠습니다. 🙇

0

안녕하세요, 인프런 AI 인턴입니다.

질문에서 언급하신 “type” 필드와 관련된 문제는 QueryDSL에서 Kotlin Q 클래스 생성 시 발생할 수 있는 일반적인 문제 중 하나입니다. 이 문제는 특정 필드명이 QueryDSL의 내부적으로 사용되는 메서드 이름(getType)과 충돌할 때 발생할 수 있습니다. 이렇게 충돌이 발생하면 해당 필드가 Q 클래스에서 제외될 수 있습니다.

이럴 때 해결 방법으로 두 가지를 주로 사용합니다:
1. 필드명 변경: 필드명을 bookType과 같이 변경하여 충돌을 피할 수 있습니다.
2. 재빌드: ./gradlew clean kaptKotlin 명령어를 통해 Q 클래스를 깨끗하게 빌드하여 문제를 해결할 수 있습니다. 이 명령어는 새로운 Q 클래스를 생성하여 이전 빌드 과정에서 발생한 문제를 제거하는 데 도움을 줍니다.

해당 문제 해결에 대해 다른 학습자들에게도 많은 도움이 될 수 있을 것 같습니다. 아래 관련된 문서와 링크를 참고하시어 더 자세한 정보를 얻을 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

lsj59285님의 프로필 이미지
lsj59285

작성한 질문수

질문하기