강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của lsj59285
lsj59285

câu hỏi đã được viết

Trong thực tế! Phát triển ứng dụng quản lý thư viện với Kotlin và Spring Boot (tái cấu trúc dự án Java)

Bài học 39. Sử dụng Querydsl - Phương pháp thứ hai

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

Viết

·

165

·

Đã chỉnh sửa

1

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

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

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

 

javaspringkotlinspring-boot리팩토링

Câu trả lời 2

0

lannstark님의 프로필 이미지
lannstark
Người chia sẻ kiến thức

안녕하세요! 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 클래스를 생성하여 이전 빌드 과정에서 발생한 문제를 제거하는 데 도움을 줍니다.

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

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

Hình ảnh hồ sơ của lsj59285
lsj59285

câu hỏi đã được viết

Đặt câu hỏi