반응형

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

+ Recent posts