[트러블 슈팅] QueryDSL 의 Q클래스가 자동으로 생성되지 않는 문제

이규정·2025년 3월 12일

1. 문제상황


QueryDSL을 적용했는데도 Q클래스가 자동생성되지 않았음. (QTodo, QUser 등)

빌드(./gradlew build)를 여러 번 수행해도 build/generated/sources 경로에 Q클래스가 생성되지 않아 QueryDSL 사용 자체가 불가능했음.

2. 사실수집


  • QueryDSL 관련 의존성은 build.gradle에 아래처럼 설정했었음.
dependencied{
	
    // ...
    
    // QueryDSL
    implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
    annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
    annotationProcessor "jakarta.annotation:jakarta.annotation-api"
    annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}
  • IntelliJ의 프로젝트 구조를 확인해보니 generated 폴더에 Q클래스가 생성되지 않았음.

3. 원인분석


QueryDSL 라이브러리의 구조상, apt 모듈은 jpa 모듈의 하위 종속성으로 포함되어 있어 apt와 jpa의 버전이 정확하게 일치하지 않으면 Q클래스가 생성되지 않는 문제가 발생할 수 있음.

즉, QueryDSL은 jpa와 apt의 종속성이 정확히 일치해야 하며, Jakarta 또는 Java EE 버전까지 맞춰야 하는 상황이었음. 버전을 맞추지 않으면 Annotation Processor가 제대로 동작하지 않아 Q클래스가 생성되지 않음.

4. 해결방법


아래처럼 QueryDSL의 jpa와 apt 종속성을 정확히 맞추고 Jakarta 버전까지 명시적으로 추가.

dependencied{
	
    // ...
    
    // QueryDSL
    implementation 'com.querydsl:querydsl-jpa:5.1.0:jakarta'
    annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
    annotationProcessor "jakarta.annotation:jakarta.annotation-api"
    annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}

이후, Gradle을 리프레시하고 다시 빌드하자 (./gradlew clean build) Q클래스가 정상적으로 생성됨을 확인할 수 있었음.

결론적으로 QueryDSL의 jpa와 apt 버전을 완벽히 맞춰주고, 환경(Java EE or Jakarta)을 명확하게 설정하면 Q클래스 생성 문제는 해결됨.

5. 참고자료

profile
반갑습니다. 백엔드 개발자가 되기 위해 노력중입니다.

0개의 댓글