반응형
Spring Boot QueryDSL 초기 설정
Quesrydsl 을 사용하기 위해서는 SpringDataJPA도 추가해야 함
build.gradle 설정 추가
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// H2 Database
runtimeOnly 'com.h2database:h2'
// QueryDSL
implementation 'com.querydsl:querydsl-jpa:5.0.0'
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jpa" // querydsl JPAAnnotationProcessor 사용 지정
annotationProcessor "jakarta.persistence:jakarta.persistence-api" // java.lang.NoClassDefFoundError(javax.annotation.Entity) 발생 대응
annotationProcessor "jakarta.annotation:jakarta.annotation-api" // java.lang.NoClassDefFoundError (javax.annotation.Generated) 발생 대응
}
/** clean 태스크 실행시 QClass 삭제 */
clean {
delete file('src/main/generated') // 인텔리제이 Annotation processor 생성물 생성위치
}
IntelliJ에서 프로젝트 실행시, 엔티티 클래스 앞에 Q가 붙은 Q클래스가 생성이 되는데 이는 IntelliJ 설정에 따라 생성되는 위치가 다르다.
IntelliJ IDEA에서 빌드방식 선택(Gradle or IntelliJ IDEA에 따라 ‘Querydsl Annotation processor’ 가 생성하는 Q클래스의 위치가 달라지기 때문이다.
Gradle 로 설정시
- Qclass 생성경로: build/generated/sources/annotationProcessor/java/main
- Q클래스에 대한 별도 정리 작업 없이 Clean태스크로 정리 된다.
IntelliJ IDEA로 설정시
- Qclass 생성경로: src/main/generated
- Compiler Annotation procesoors 설정영향받음
- 기존 생성된 Q클래스는 갱신되지만 엔티티 위치 변경이나 삭제된 경우 기존Q클래스는 그대로 유지된다
- src/main/generated 폴더에 생성된 Q클래스 처리 태스크를 작성 해야 한다.
- IntelliJ IDE 설정으로 사용시 github로 버전관리를 하면 generated 경로 파일이 올라가지 않도록 .gitignore에 추가해주도록 하자. (generated)
[참고자료]
https://gaemi606.tistory.com/entry/Spring-Boot-Querydsl-추가-Gradle-7x
http://honeymon.io/tech/2020/07/09/gradle-annotation-processor-with-querydsl.html