Spring Boot 프로젝트에서 Spring Data JPA를 사용할때 한 번쯤 볼수있는 오류입니다.
참고로 JPA에서 쿼리를 작성하는 방법은 쿼리메소드, @Query, QueryDSL
이 있습니다.
이중에서 확장성 있는 쿼리를 작성할 때는 QueryDSL이 필수입니다.
QueryDSL을 사용하기 위해서는 Entity 클래스
를 Q도메인 클래스
로 변환해야 합니다.
물론 변환은 빌드 설정을 통해 자동으로 이루어집니다.
정상적으로 빌드가 되면 아래와 같이 Q도메인 클래스를 만날 수 있습니다.
그런데 Q도메인을 찾지 못하는 오류가 발생합니다.
원인은 여러가지가 있습니다.
Lombok 충돌, 버전 오류, 빌드 설정 오류, 프로젝트 설정 오류, 코드 오류 등
오늘은 그중에서 기본적인 해결 방법을 알아보겠습니다.
최신 버전의 Intellij를 사용한다면, build.gradle
설정을 확인해 봅니다.
플러그인을 설치하고 라이브러리를 의존성에 추가해서 빌드 할때 지정 경로에 컴파일하는 설정입니다.
plugins { id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' } dependencies { implementation 'com.querydsl:querydsl-jpa' } def querydslDir = '$buildDir/generated/querydsl' querydsl { jpa = true querydslSourceDir = querydslDir } sourceSets { main.java.srcDir querydslDir } configurations { querydsl.extendsFrom compileClasspath } compileQuerydsl { options.annotationProcessorPath = configurations.querydsl }
Annotation Processing
설정을 확인합니다.
QueryDSL은 Annotation Processor
로 컴파일 됩니다.
컴파일 과정에서 QueryDSL
오류가 발생하는 경우가 종종 있습니다.
이때는 초기화를 진행합니다.
Gradle 프로젝트 빌드가 되지 않기 때문에, IntelliJ IDEA
로 빌드 설정을 변경합니다.
사실 Gradle 빌드
는 로컬 환경에서 느리고 오류가 많습니다.
참고로 IntelliJ 최신 버전 부터는 Gradle 빌드가 기본 설정입니다.
이유는 로컬과 배포 환경을 동일하게 구성하기 위함입니다.
그래도 오류가 나거나 속도가 느리면, 어쩔수 없이 IntelliJ IDEA를 사용해야 합니다.
프로젝트 설정 과정에서 문제가 발생하는 경우도 간혹 있습니다.
그래서 IntelliJ 캐쉬
를 지우고 다시 시작해도 좋습니다.
이제 설정에 문제가 없다면, Gradle Project를 clean하고 다시 build 해줍니다.
빌드가 정상적으로 됐는데, 특정 페이지에서 오류가 발생하는 경우도 있습니다.
이때는 코드 오류를 찾아보면 됩니다.