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

우기님의 프로필 이미지
우기

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

객체와 테이블 매핑

[군인입니다] 클라우드 환경 gitpod에서 진행하고 있는데, 실행 시 Unable to locate persister 에러가 발생합니다.

작성

·

63

·

수정됨

0

<질문요약>

Gitpod 환경에서 실습을 진행 중인데, 데이터베이스에 연결은 되지만, 엔티티가 Persist 되질 않습니다.

 

[필자 개발환경]

군대 사지방에서 GitPod 클라우드 개발환경에서,
VS Code IDEA 기반 Java 프로젝트를 생성해 JPA 기본편 강의를 듣고 있습니다.

Gitpod 프로젝트 셋팅 값
- Java 17 버전
- Gradle java 프로젝트


[이슈사항]

build.gradle 파일

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.3.4'
	id 'io.spring.dependency-management' version '1.1.6'
}

group = 'com.inflearn'
version = '0.0.1-SNAPSHOT'

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

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-web'
	implementation 'org.hibernate:hibernate-core' // JPA 하이버네이트
	implementation 'javax.xml.bind:jaxb-api'

	implementation 'com.h2database:h2'


	runtimeOnly 'com.h2database:h2' // H2 DB 드라이버 같은 역할

	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

}

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

 

persistence.xml 파일

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
    <persistence-unit name="hello">
        <properties>
            <!-- 필수 속성 -->
            <property name="jakarta.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="jakarta.persistence.jdbc.user" value="sa"/>
            <property name="jakarta.persistence.jdbc.password" value=""/>
            <property name="jakarta.persistence.jdbc.url" value="jdbc:h2:~/jpa-basic"/>
            <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.JtaPlatform" />

            <!-- 옵션 -->
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.use_sql_comments"  value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="create" />
        </properties>
    </persistence-unit>

</persistence>

> 위와 같이 build 파일과 resources/META-INF 폴더에
persistence.xml 파일까지 셋팅을 해주었습니다.


JpaMain 클래스 / Member 클래스 구현한 후,
JpaMain 클래스 실행 시
EntityManager 로 H2 Database에 Connection은 되지만, 아래와 같은 에러코드로 Persist 가 되지 않습니다.

image.png

 

여건 상 클라우드 환경에서 개발할 수 없기에, 이를 수행할 수 있는 방법을 알려주시면 감사드립니다.

 

답변 2

1

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

안녕하세요. 우기님

오류 메시지를 확인해보니, Member 객체가 엔티티가 아닌 것 같아요. 아니면 그 안에 다른 문제가 있을 수 있습니다.

Member 객체에 @Entity가 정확하게 잘 적혀있는지 확인해주세요.

(참고로 jakarta.persistence 패키지를 사용해야 합니다.)

만약 해결이 안된다면 다음을 참고해서 전체 코드를 업로드 해주세요.

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

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

https://bit.ly/3fX6ygx


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


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

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

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


링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.

우기님의 프로필 이미지
우기
질문자

해당 문제 다음과 같이 해결했습니다 !
말씀해주신, Member 클래스에는 @Entity 어노테이션은 기존에 존재하고 있었습니다.
(엔티티 어노테이션을 여러 개 지웠다가 해봐도 도저히 작동이 안되었습니다.)

해결 방법은
persistence.xml 파일에 유닛 태그 내부에 인식하지 못하는 엔티티 클래스를 별도로
등록하니, JPA가 엔티티를 인식하여 persist 메소드를 정상적으로 호출하네요.

<persistence-unit name="hello">
     <!-- 엔티티 등록 -->
     <class>jpa.jpa_basic.hellojpa.Member</class>
</persistence-unit>


질문입니다.
Gitpod 클라우드 환경에서는 별도의 h2 DB를 설치없이 h2 DB에 접속이 가능합니다. 해당 환경에서 H2 DB가 어디서 어떻게 동작하는지 추적할 수 있는 방법을 알려주실 수 있나요?

 

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

우기님 잘 해결하셨습니다 🙂

질문하신 부분은 저도 잘 모르겠습니다. 혹시 아시는 분 있으면 답변 부탁드려요.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 우기님께서 GitPod 환경에서 JPA를 사용하면서 Unable to locate persister 오류가 발생하셨다고 하셨네요. 해당 오류는 대개 JPA 엔티티 클래스가 Hibernate에 의해 인식되지 않을 때 발생합니다. 이 문제를 해결하기 위해 몇 가지 점검해보실 부분을 안내드리겠습니다.

해결 방안

  1. 엔티티 클래스 설정 확인:

    • @Entity 어노테이션이 Member 클래스에 올바르게 적용되어 있는지 확인하세요.
    • 엔티티 클래스는 반드시 @Entity 어노테이션과 @Table 어노테이션을 포함하도록 해야 합니다.
  2. 패키지 구조 및 클래스 경로 확인:

    • Member 클래스가 올바른 경로에 존재하는지 확인하고, persistence.xml<class> 태그에 명시되어 있는 클래스 경로와 일치하는지 확인하세요.
    • 만약 persistence.xml에 특정 클래스를 명시하지 않았다면, persistence.xml<class> 태그에 해당 클래스를 추가해 확인해 보십시오.
  3. 자동 스캔 설정:

    • Spring Boot를 사용하신다면 JPA 리포지토리를 스캔할 수 있는 설정인지 확인하세요. Spring Boot는 src/main/resources/META-INF/persistence.xml을 사용하지 않고 application.properties 또는 application.yml 파일로 설정을 관리합니다.
    • application.properties 내부에 해당 설정을 추가해 보세요:
     spring.jpa.show-sql=true
     spring.jpa.hibernate.ddl-auto=create
     spring.datasource.url=jdbc:h2:mem:testdb
     spring.datasource.driverClassName=org.h2.Driver
     spring.datasource.username=sa
     spring.datasource.password=
    
  4. 의존성 문제 확인:

    • build.gradle 파일의 의존성 설정이 올바른지 점검하세요. 또한 hibernate-core 등 필요한 JPA 관련 의존성이 제대로 추가되어 있는지도 확인해 주세요.
  5. 데이터베이스 연결 문제 확인:

    • persistence.xmljakarta.persistence.jdbc.url 설정 값을 점검하고, 올바른 데이터베이스 URL을 사용하는지 확인하세요.

추가적으로 같은 문제에 대해 유사한 사례와 해결 방안이 논의된 게시글을 참고하시기 바랍니다:

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

우기님의 프로필 이미지
우기

작성한 질문수

질문하기