발생 상황
- 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`로 전환되었기 때문입니다.
- 다음의 링크를 읽고 학습하였습니다.
대처
- 따라서 다음과 같이 작성하면 `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"
}