관리 메뉴

피터의 개발이야기

[Kotlin] QueryDSL의 Q클래스 생성 과정에서 Entity 참조 오류 해결 본문

Programming/Kotlin

[Kotlin] QueryDSL의 Q클래스 생성 과정에서 Entity 참조 오류 해결

기록하는 백앤드개발자 2024. 8. 15. 10:10
반응형

ㅁ 들어가며

ㅇ QueryDSL의 Q클래스 생성 과정에서 Entity를 참조하지 못하는 문제가 발생하여, 주요 원인과 해결 방법을 정리하였다.

 

ㅁ 에러

/Users/peterseo/study/kotlin/spring-jpa-query-dsl/build/generated/source/kapt/main/org/peterica/springjpaquerydsl/domain/QProductsEntity.java:16: error: cannot find symbol
public class QProductsEntity extends EntityPathBase<ProductsEntity> {
                                                    ^
  symbol: class ProductsEntity

ㅇ 빌드 시 QueryDSL이 생성한 QProductsEntity에서 ProductsEntity를 참조하지 못하는 에러가 발생하였다.

 

ㅇ 하지만 빌드가 끝나고 실질적으로 ProductsEntity는 참조가 가능한 상태였다.

ㅇ 문제는 Gradle 빌드되는 중간에 해당 리소스를 참조하지 못하는 점이었다.

ㅇ 문제를 해결하기 위한 검색을 하였고, 해결 방법을 정리하였다.

 

ㅁ 해결방법

어노테이션 프로세서 설정 문제

  ㄴ IntelliJ IDEA의 Annotation Processors 설정이 잘못되었을 수 있다.
  ㄴ "Enable annotation processing"이 체크되어 있는지 확인
  ㄴ "Store generated sources relative to"가 "Module content root"로 설정되어 있는지 확인

 

빌드 캐시 문제

  ㄴ 이전 빌드의 캐시가 남아있어 새로운 변경사항이 반영되지 않을 수 있다.
  ㄴ 프로젝트를 clean하고 다시 빌드

 

// querydsl
implementation("com.querydsl:querydsl-jpa:5.0.0:jakarta")
implementation("com.querydsl:querydsl-apt:5.0.0:jakarta")
implementation("jakarta.persistence:jakarta.persistence-api")
implementation("jakarta.annotation:jakarta.annotation-api")
kapt("com.querydsl:querydsl-apt:5.0.0:jakarta")
kapt("org.springframework.boot:spring-boot-configuration-processor")

Gradle 설정 문제

  ㄴ QueryDSL 관련 Gradle 설정이 올바르지 않을 수 있다.
  ㄴ kapt와 annotationProcessor 설정을 확인해야 한다.

KAPT와 Annotation Process 필요성

  Annotation은 일종의 메타데이터 형태이며, 프로그램의 일부가 아니라 프로그램에 대한 정보를 제공한다. Annotation 자체로는 실행되는 코드에 직접적인 영향을 미치지 않는다. Annotation의 용도를 사용하기 위해서 Annotation Processor가 필요하다. Annotation Processor는 Java 컴파일러 플러그인의 일종으로, 컴파일러에게 어떠한 요소(클래스, 메서드, 필드 등)에 annotation이 추가 되어있는지 확인하도록 한다. Kotlin에서 Annotation처리를 위해서 KAPT(Kotlin Annotation Processing Tool)을 사용해야 한다. Kotlin은 kotlinc로 컴파일되기 때문에 기존에 Java로 작성된 Annotation Process로는 Kotlin의 Annotation이 제대로 처리되지 않는다. 

 

ㅁ 함께 보면 좋은 사이트

[QueryDSL] Q클래스, cannot find symbol error (feat.intelliJ)

[QueryDsl] Can not find symbol 에러 해결

Kotlin KAPT(Kotlin Annotation Processing Tool) 이란

반응형
Comments