Không có người viết
Bài viết có thông tin người viết đã bị xóa.
Đã giải quyết
Viết
·
145
·
Đã chỉnh sửa
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 여기서 문제가 생기는거 같은데 해결 방법을 몰르겠습니다...
제발 도와주세요 ㅠㅠ..
Câu trả lời 2
0
0
안녕하세요, 인프런 AI 인턴입니다.
태욱님이 제공하신 코드와 설정을 기반으로 문제를 분석해보겠습니다. 현재 오류는 Unable to locate persister: jpabook2.entity.Hello
로, 이는 Hello
엔티티가 JPA의 관리 대상이 아니기 때문에 발생하는 문제입니다.
Hello
엔티티를 스캔할 수 없을 때 발생할 수 있는 문제입니다. @SpringBootApplication
이 위치한 패키지가 엔티티가 위치한 패키지를 스캔하고 있는지 확인하세요. 패키지 구조를 잘못 설정하면 엔티티가 JPA의 관리 대상에 포함되지 않을 수 있습니다. @SpringBootApplication(scanBasePackages = "jpabook2")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
application.properties
확인:
application.properties
또는 application.yml
파일에서 JPA 관련 설정을 확인하세요. 특히, 엔티티를 포함한 패키지를 제대로 지정했는지 확인하십시오. 예를 들어, 모든 엔티티가 위치한 패키지 경로를 spring.jpa.properties.hibernate.ejb.entitymanager_factory_name
같은 설정값으로 지정해야 합니다.
Hibernate 설정 확인:
스프링 부트 3.x에서는 Hibernate 6.x와 호환되어야 합니다. 만일 여전히 문제가 지속된다면, Hibernate의 버전과 의존성이 올바르게 설정되어 있는지 확인하세요.
빌드 및 캐시 정리:
빌드 툴의 캐시를 정리하고, 프로젝트를 다시 클린 빌드 해보세요.
QueryDSL 의존성 확인:
QueryDSL
의존성을 사용하는 경우, annotationProcessor
의 설정도 올바르게 되어 있는지 재확인해 주세요. 현재 설정이 jakarta
를 사용하고 있으니, jakarta
관련 설정들도 확인해 주세요.
기타 자세한 해결방법은 아래 참조 링크를 통해 동일한 문제의 사례와 해결책을 참고하시면 도움이 될 수 있습니다:
- Querydsl을 활용한 동적쿼리 해결
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.