[Querydsl] Spring boot 3.0 이상 Query DSL 설정 방법

Coodori·2023년 3월 16일
4

CherishU

목록 보기
5/29

문제 발생

  1. 평소에 하던 querydsl 세팅이 되질 않는다.
  2. 터미널 에러 메세지를 보니 entityFactory가 주입이 되질않는다.

문제 발견

  1. Spring boot 3버전 부터는 querydsl 세팅이 변경되었다고 한다.

해결

build.gradle

//추가
buildscript {
	ext {
		queryDslVersion = "5.0.0"
	}
}

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies{
	... 
    //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"
}
// Querydsl 설정부
def generated = 'src/main/generated'

// querydsl QClass 파일 생성 위치를 지정
tasks.withType(JavaCompile) {
	options.getGeneratedSourceOutputDirectory().set(file(generated))
}

// java source set 에 querydsl QClass 위치 추가
sourceSets {
	main.java.srcDirs += [ generated ]
}

// gradle clean 시에 QClass 디렉토리 삭제
clean {
	delete file(generated)
}

해준뒤 다시 querydsl config 파일을 만들었다.

@Configuration
public class QueryDslConfig {

    @Autowired private EntityManager em;
    @Bean
    public JPAQueryFactory jpaQueryFactory(){
        return new JPAQueryFactory(em);
    }
}

정상적으로 2.x.x버전처럼 entitiyManager가 주입이 되었다.

  • build -> clean을 하게되면 generated 폴더가 사라진다.
  • build -> build 를 하게되면 Q파일이 정상적으로 생긴다.

Reference

https://velog.io/@juhyeon1114/Spring-QueryDsl-gradle-%EC%84%A4%EC%A0%95-Spring-boot-3.0-%EC%9D%B4%EC%83%81
https://www.inflearn.com/chats/700670/querydsl-springboot-3-0%EC%9D%98-gradle-%EC%84%A4%EC%A0%95%EC%9D%84-%EA%B3%B5%EC%9C%A0%ED%95%A9%EB%8B%88%EB%8B%A4

profile
https://coodori.notion.site/0b6587977c104158be520995523b7640

6개의 댓글

comment-user-thumbnail
2023년 12월 8일

설정때문에 고생했었는데 덕분에 해결했습니다. 감사합니다!

1개의 답글
comment-user-thumbnail
2023년 12월 16일

선생님 감사합니다..

1개의 답글
comment-user-thumbnail
2024년 3월 3일

너무 감사합니다! 정말정말 감사합니다!!!

1개의 답글