<aside> ☑️ JPQL의 경우, 정적 쿼리는 실행 시 에러가 발생하나 동적 쿼리는 런타임 시 에러가 발생한다
따라서, 동적 쿼리 디버깅을 용이하게 하기 위해 QueryDSL을 적용한다
</aside>
// QueryDSL 5.0이상 부터는 아래 옵션 추가
plugins {
...
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
...
}
...
dependencies {
// querydsl 추가
implementation "com.querydsl:querydsl-jpa:5.0.0"
implementation "com.querydsl:querydsl-apt:5.0.0"
...
}
// Qtype 생성 경로
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
jpa = true
querydslSourcesDir = querydslDir
}
sourceSets {
main.java.srcDir querydslDir
}
compileQuerydsl{
options.annotationProcessorPath = configurations.querydsl
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
querydsl.extendsFrom compileClasspath
}
[Spring] QueryDsl gradle 설정 (Spring boot 3.0 이상)
plugins {
...
}
...
dependencies {
...
// Spring boot 3.x이상에서 QueryDsl 패키지를 정의하는 방법
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
//QueryDSL에서 Entity를 찾지 못하는 문제 방지
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
...
}
...
// QueryDsl 빌드 옵션 (선택)
def querydslDir = "$buildDir/generated/querydsl"
sourceSets {
main.java.srcDirs += [ querydslDir ]
}
tasks.withType(JavaCompile) {
options.annotationProcessorGeneratedSourcesDirectory = file(querydslDir)
}
clean.doLast {
file(querydslDir).deleteDir()
}
gradle 탭에서 build -> clean 실행하기