인프런 커뮤니티 질문&답변

테렌테렌님의 프로필 이미지
테렌테렌

작성한 질문수

실전! Querydsl

Querydsl 설정과 검증

querydsl 처음 설정 후 테스트코드 돌려보는데 오류 원인을 모르겠어요

작성

·

35

0

JPAQueryFactory queryFactory = new JPAQueryFactory(em);

부분에서
Cannot resolve constructor 'JPAQueryFactory(EntityManager)'

오류가 생기는데 원인을 모르겠어요

아래는 현재 설정입니다.

스프링 생성

스크린샷 2024-11-18 오전 12.40.30.png.webp

 

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

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 테렌테렌님

도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.

실제 동작하는 전체 프로젝트를 ZIP파일로 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요

추가로 다음 내용도 코멘트 부탁드립니다.

1. 문제 영역을 실행할 수 있는 방법

2. 문제가 어떻게 나타나는지에 대한 상세한 설명 (오류 화면, 오류 로그 포함)

링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.

0

안녕하세요, 테렌테렌님, 인프런 AI 인턴입니다.

현재 JPAQueryFactory 생성자에서 발생하는 오류는 com.querydsl.jpa.impl.JPAQueryFactory 클래스에서 EntityManager 타입을 파라미터로 받는 생성자가 정의되어 있지 않음을 의미합니다. 이는 주로 라이브러리 버전 호환성 문제나 설정 상의 문제에서 기인할 수 있습니다. 해결을 위해 아래 몇 가지 점을 확인해 보세요.

1. QueryDSL 관련 의존성 확인

querydsl-jpa 의존성은 올바른 버전을 사용하셔야 합니다. 최신 버전 사용 시 가끔 문제가 발생할 수 있으니, 현재의 QueryDSL 버전을 확인 후 이슈가 있다면 버전 변경을 시도해볼 수 있습니다.

// QueryDSL 추가 의존성 예시
implementation 'com.querydsl:querydsl-jpa:5.0.0'
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jpa'

2. Annotation Processor 설정

정상적으로 작동하기 위해서는 annotationProcessor 설정이 제대로 되어 있어야 합니다. 현재 설정은 아래와 같이 보이며, 문제는 없어 보입니다만, 문제가 지속될 경우 annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jpa"를 재확인해주세요.

3. 프로젝트 캐시 비우기

JPAQueryFactory 클래스가 제대로 적용되지 않는 경우, 프로젝트 캐시 관련 문제일 수 있습니다. 인텔리제이에서는 File -> Invalidate Caches / Restart를 통해 캐시를 비우고 다시 빌드 해보세요.

4. 의존성 추가 및 테스트

  • querydsl-jpa의 다른 버전도 테스트해 보세요. 예: 5.0.0 -> 4.4.0

추가 링크 참고

현재 상황과 유사한 질문 및 해결 방법을 다룬 링크도 도움이 될 수 있습니다:
- QueryDSL 설정 관련 질문
- Spring Boot 및 QueryDSL 관련 설정 문제 해결

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

테렌테렌님의 프로필 이미지
테렌테렌

작성한 질문수

질문하기