inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! Querydsl

Querydsl 설정과 검증 실패 제발 도와주세요....ㅠㅠ

해결된 질문

233

작성자 없음

작성한 질문수 0

0

package jpabook2.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import lombok.Getter;
import lombok.Setter;

@Entity
@Getter
@Setter
public class Hello {

    @Id @GeneratedValue
    private Long id;
}
plugins {
	id 'java'
	id 'org.springframework.boot' version '3.4.3'
	id 'io.spring.dependency-management' version '1.1.7'
}

group = 'jpabook2'
version = '0.0.1-SNAPSHOT'

java {
	toolchain {
		languageVersion = JavaLanguageVersion.of(23)
	}
}

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-validation'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	runtimeOnly 'com.h2database:h2'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

	//test 롬복 사용
	testCompileOnly 'org.projectlombok:lombok'
	testAnnotationProcessor 'org.projectlombok:lombok'
	//Querydsl 추가
	implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
	annotationProcessor """com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"""
	annotationProcessor "jakarta.annotation:jakarta.annotation-api"
	annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}

tasks.named('test') {
	useJUnitPlatform()
}

clean {
	delete file('src/main/generated')
}
package jpabook2.jpashop2;

import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import jpabook2.entity.Hello;
import jpabook2.entity.QHello;
import org.assertj.core.api.Assertions;
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 static org.assertj.core.api.Assertions.*;

@SpringBootTest
@Transactional
class Jpashop2ApplicationTests {

	@Autowired
	EntityManager em;

	@Test
	void contextLoads() {
        Hello hello = new Hello();
        em.persist(hello);

        JPAQueryFactory query = new JPAQueryFactory(em);
        QHello qHello = new QHello("h");

        Hello result = query
                .selectFrom(qHello)
                .fetchOne();

        Assertions.assertThat(result).isEqualTo(hello);
    }

}
Mockito is currently self-attaching to enable the inline-mock-maker. This will no longer work in future releases of the JDK. Please add Mockito as an agent to your build what is described in Mockito's documentation: https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#0.3
WARNING: A Java agent has been loaded dynamically (C:\Users\USER\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy-agent\1.15.11\a38b16385e867f59a641330f0362ebe742788ed8\byte-buddy-agent-1.15.11.jar)
WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning
WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information
WARNING: Dynamic loading of agents will be disallowed by default in a future release

Unable to locate persister: jpabook2.entity.Hello
java.lang.IllegalArgumentException: Unable to locate persister: jpabook2.entity.Hello
	at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:764)
	at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:745)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:320)
	at jdk.proxy3/jdk.proxy3.$Proxy105.persist(Unknown Source)
	at jpabook2.jpashop2.Jpashop2ApplicationTests.contextLoads(Jpashop2ApplicationTests.java:25)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1597)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1597)
Caused by: org.hibernate.UnknownEntityTypeException: Unable to locate persister: jpabook2.entity.Hello
	at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.getEntityDescriptor(MappingMetamodelImpl.java:395)
	at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1512)
	at org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:315)
	at org.hibernate.event.internal.EntityState.getEntityState(EntityState.java:64)
	at org.hibernate.event.internal.DefaultPersistEventListener.entityState(DefaultPersistEventListener.java:114)
	at org.hibernate.event.internal.DefaultPersistEventListener.persist(DefaultPersistEventListener.java:87)
	at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79)
	at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:55)
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127)
	at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:761)
	... 9 more


Unable to locate persister: jpabook2.entity.Hello
org.hibernate.UnknownEntityTypeException: Unable to locate persister: jpabook2.entity.Hello
	at app//org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.getEntityDescriptor(MappingMetamodelImpl.java:395)
	at app//org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1512)
	at app//org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:315)
	at app//org.hibernate.event.internal.EntityState.getEntityState(EntityState.java:64)
	at app//org.hibernate.event.internal.DefaultPersistEventListener.entityState(DefaultPersistEventListener.java:114)
	at app//org.hibernate.event.internal.DefaultPersistEventListener.persist(DefaultPersistEventListener.java:87)
	at app//org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79)
	at app//org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:55)
	at app//org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127)
	at app//org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:761)
	at app//org.hibernate.internal.SessionImpl.persist(SessionImpl.java:745)
	at java.base@23.0.1/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base@23.0.1/java.lang.reflect.Method.invoke(Method.java:580)
	at app//org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:320)
	at app/jdk.proxy3/jdk.proxy3.$Proxy105.persist(Unknown Source)
	at app//jpabook2.jpashop2.Jpashop2ApplicationTests.contextLoads(Jpashop2ApplicationTests.java:25)
	at java.base@23.0.1/java.lang.reflect.Method.invoke(Method.java:580)
	at java.base@23.0.1/java.util.ArrayList.forEach(ArrayList.java:1597)
	at java.base@23.0.1/java.util.ArrayList.forEach(ArrayList.java:1597)

작업 파일 구글 드라이브입니다.

https://drive.google.com/file/d/18Qe7HzR8zWuy4KBJycRbtkXGed1LrQfl/view?usp=drive_link

파일이름이 영상과 다른이유는 실습에서 querydsl 사용하기 위해서 다르게했습니다.

persist 여기서 문제가 생기는거 같은데 해결 방법을 몰르겠습니다...

제발 도와주세요 ㅠㅠ..

java jpa

답변 2

0

태욱

해결했습니다.... 패키지 위치 오류였습니다.... 도와주시로 와주신분들 감사합니다.

0

인프런 AI 인턴

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

태욱님이 제공하신 코드와 설정을 기반으로 문제를 분석해보겠습니다. 현재 오류는 Unable to locate persister: jpabook2.entity.Hello로, 이는 Hello 엔티티가 JPA의 관리 대상이 아니기 때문에 발생하는 문제입니다.

해결책:

  1. 엔티티 스캔 확인:
    스프링 부트가 Hello 엔티티를 스캔할 수 없을 때 발생할 수 있는 문제입니다. @SpringBootApplication이 위치한 패키지가 엔티티가 위치한 패키지를 스캔하고 있는지 확인하세요. 패키지 구조를 잘못 설정하면 엔티티가 JPA의 관리 대상에 포함되지 않을 수 있습니다.
   @SpringBootApplication(scanBasePackages = "jpabook2")
   public class Application {
       public static void main(String[] args) {
           SpringApplication.run(Application.class, args);
       }
   }
  1. application.properties 확인:
    application.properties 또는 application.yml 파일에서 JPA 관련 설정을 확인하세요. 특히, 엔티티를 포함한 패키지를 제대로 지정했는지 확인하십시오. 예를 들어, 모든 엔티티가 위치한 패키지 경로를 spring.jpa.properties.hibernate.ejb.entitymanager_factory_name 같은 설정값으로 지정해야 합니다.

  2. Hibernate 설정 확인:
    스프링 부트 3.x에서는 Hibernate 6.x와 호환되어야 합니다. 만일 여전히 문제가 지속된다면, Hibernate의 버전과 의존성이 올바르게 설정되어 있는지 확인하세요.

  3. 빌드 및 캐시 정리:
    빌드 툴의 캐시를 정리하고, 프로젝트를 다시 클린 빌드 해보세요.

  4. QueryDSL 의존성 확인:
    QueryDSL 의존성을 사용하는 경우, annotationProcessor의 설정도 올바르게 되어 있는지 재확인해 주세요. 현재 설정이 jakarta를 사용하고 있으니, jakarta 관련 설정들도 확인해 주세요.

기타 자세한 해결방법은 아래 참조 링크를 통해 동일한 문제의 사례와 해결책을 참고하시면 도움이 될 수 있습니다:
- Querydsl을 활용한 동적쿼리 해결

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

SpringBoot 4.X에서의 Querydsl 설정

0

114

2

querydsl 오픈소스에 대한 질문

1

86

1

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

0

117

1

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

0

333

2

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

1

76

1

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

0

164

1

querydsl sum() 메서드 없어요.

0

164

2

build 디렉터리 생성

0

143

2

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

0

117

2

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

0

95

1

오타 제보 드립니다.

0

75

2

벌크 연산과 flush, clear

0

79

1

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

0

91

1

QHello import하기 문제 발생

0

150

2

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

0

71

2

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

1

201

2

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

1

205

1

querydsl 설정 문제

0

224

2

quey dsl 설정부분

0

159

2

count 쿼리 관련 질문입니다!

0

76

1

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

0

90

1

답변부탁드리겠습니다.

0

92

2

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

0

67

1

중급문법 벌크연산에서

0

84

2