본문 바로가기
🪲 bugs

Error: Springboot 3.0이상에서 QueryDSL 설정

by iirin 2023. 9. 23.

발생 상황

  • Springboot 3.0 에서 QueryDSL을 위해 build.gradle과 queryDsl configuration을 다음과 같이 설정했을 때 `JPAQueryFactory` 생성자를 찾을 수 없는 에러가 발생합니다.
dependencies {
		implementation "com.querydsl:querydsl-jpa:5.0.0"
    annotationProcessor(
            "javax.persistence:javax.persistence-api",
            "javax.annotation:javax.annotation-api",
            "com.querydsl:querydsl-apt:5.0.0:jpa"
    )
}
import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class QueryDslConfig {

    @PersistenceContext
    private EntityManager entityManager;

    @Bean
    public JPAQueryFactory jpaQueryFactory() {
        return new JPAQueryFactory(entityManager);
    }
}
  • 오류 메시지
Cannot resolve constructor 'JPAQueryFactory(EntityManager)'

 

발생 원인

  • Springboot 3.0에서는 `javax`를 사용하지 않습니다. `jakarta EE`로 전환되었기 때문입니다.
  • 다음의 링크를 읽고 학습하였습니다.
 

스프링 부트 3.0 으로 전환 - Dooray! POST

2022년 11월에 기존의 Spring framework 5 와 Spring Boot 2.X 버전을 대체하는 Spring framework 6와 Spring Boot 3 가 릴리즈되었습니다. 어떤 변화가 있고, 어떻게 설정해야 할지 알아봅니다

post.dooray.io

대처

  • 따라서 다음과 같이 작성하면 `jakara` 에서 class를 주입받을 수 있게 됩니다.
dependencies {
	// querydsl
    implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
    annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
    annotationProcessor "jakarta.annotation:jakarta.annotation-api"
    annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}

Refs.