inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! Querydsl

Querydsl 설정과 검증

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

738

테렌

작성한 질문수 3

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 쿼리 테스트
    }
}

 

java jpa querydsl spring

답변 2

0

김영한

안녕하세요. 테렌테렌님

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

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

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

https://bit.ly/3fX6ygx

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

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

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

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

링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.

0

인프런 AI 인턴

안녕하세요, 테렌테렌님, 인프런 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 관련 설정 문제 해결

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

SpringBoot 4.X에서의 Querydsl 설정

0

95

2

querydsl 오픈소스에 대한 질문

0

75

1

예제에서의 카운트 쿼리에서 join문과 where문은 필요없지 않나요?

0

111

1

Querydsl 6.X버전에 대해서 어떻게 생각하시나요?

0

321

2

여러 테이블 조인하여 통계치를 구하고자 할 때 어떤 방법이 더 효율적일까요

1

71

1

fetchResults()는 더이상 권장되지 않는다는데 맞나요?

0

161

1

querydsl sum() 메서드 없어요.

0

160

2

build 디렉터리 생성

0

140

2

자바 ORM 표준 JPA 프로그래밍 - 기본편 듣고 바로 학습해도 괜찮을까요?

0

114

2

현재 Querydsl에서 from절 서브쿼리를 지원하나요?

0

93

1

오타 제보 드립니다.

0

73

2

벌크 연산과 flush, clear

0

76

1

Run As Intellij 로 변경시 Q타입 import 불가

0

89

1

QHello import하기 문제 발생

0

147

2

등록된 함수 보는법(H2Dialect) 질문

0

69

2

5.0부터 Querydsl은 향후 fetchCount() , fetchResult() 를 지원하지 않기로 결정했다고 하는데 이에 맞는 강의

1

199

2

[환경설정 PDF 부트 3.0이후 설명 질문] build.gradle에 compileQuerydsl을 정의하지 않은 상태에서 Gradle->Tasks->other->compileQuerydsl을 클릭하라고 하는 이유가 무엇인가요??

1

202

1

querydsl 설정 문제

0

222

2

quey dsl 설정부분

0

158

2

count 쿼리 관련 질문입니다!

0

75

1

stringtemplate를 이용하여 where절 검색 방법 질문 드립니다.

0

89

1

답변부탁드리겠습니다.

0

90

2

(OrderSpecifier)관련 내용 어디있을가요

0

66

1

중급문법 벌크연산에서

0

83

2