작성
·
35
0
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
부분에서
Cannot resolve constructor 'JPAQueryFactory(EntityManager)'
오류가 생기는데 원인을 모르겠어요
아래는 현재 설정입니다.
스프링 생성
build.gradle 소스
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.5'
id 'io.spring.dependency-management' version '1.1.6'
//querydsl 추가
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}
group = 'study'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
//querydsl 추가
implementation 'com.querydsl:querydsl-jpa'
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jpa'
implementation 'mysql:mysql-connector-java:8.0.33' // MySQL 드라이버 최신 버전 사용
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' // 쿼리 파라미터 로그 표시 (성능에 영향을 줄 수 있음)
// runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
tasks.named('test') {
useJUnitPlatform()
}
//querydsl 추가 시작
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
jpa = true
querydslSourcesDir = querydslDir
}
sourceSets {
main.java.srcDir querydslDir
}
configurations {
querydsl.extendsFrom compileClasspath
}
compileQuerydsl {
options.annotationProcessorPath = configurations.querydsl
}
//querydsl 추가 끝
테스트코드
package study.querydsl;
import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import study.querydsl.entity.Hello;
@SpringBootTest
@Transactional
class QuerydslApplicationTests {
@Autowired
EntityManager em;
@Test
void contextLoads() {
Hello hello = new Hello();
em.persist(hello);
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
// QueryDSL 쿼리 테스트
}
}
답변 2
0
안녕하세요, 테렌테렌님, 인프런 AI 인턴입니다.
현재 JPAQueryFactory
생성자에서 발생하는 오류는 com.querydsl.jpa.impl.JPAQueryFactory
클래스에서 EntityManager
타입을 파라미터로 받는 생성자가 정의되어 있지 않음을 의미합니다. 이는 주로 라이브러리 버전 호환성 문제나 설정 상의 문제에서 기인할 수 있습니다. 해결을 위해 아래 몇 가지 점을 확인해 보세요.
querydsl-jpa
의존성은 올바른 버전을 사용하셔야 합니다. 최신 버전 사용 시 가끔 문제가 발생할 수 있으니, 현재의 QueryDSL 버전을 확인 후 이슈가 있다면 버전 변경을 시도해볼 수 있습니다.
// QueryDSL 추가 의존성 예시
implementation 'com.querydsl:querydsl-jpa:5.0.0'
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jpa'
정상적으로 작동하기 위해서는 annotationProcessor
설정이 제대로 되어 있어야 합니다. 현재 설정은 아래와 같이 보이며, 문제는 없어 보입니다만, 문제가 지속될 경우 annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jpa"
를 재확인해주세요.
JPAQueryFactory
클래스가 제대로 적용되지 않는 경우, 프로젝트 캐시 관련 문제일 수 있습니다. 인텔리제이에서는 File -> Invalidate Caches / Restart
를 통해 캐시를 비우고 다시 빌드 해보세요.
querydsl-jpa
의 다른 버전도 테스트해 보세요. 예: 5.0.0 -> 4.4.0
현재 상황과 유사한 질문 및 해결 방법을 다룬 링크도 도움이 될 수 있습니다:
- QueryDSL 설정 관련 질문
- Spring Boot 및 QueryDSL 관련 설정 문제 해결
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.