작성
·
72
·
수정됨
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 가 되지 않습니다.
여건 상 클라우드 환경에서 개발할 수 없기에, 이를 수행할 수 있는 방법을 알려주시면 감사드립니다.
답변 2
1
안녕하세요. 우기님
오류 메시지를 확인해보니, Member 객체가 엔티티가 아닌 것 같아요. 아니면 그 안에 다른 문제가 있을 수 있습니다.
Member 객체에 @Entity가 정확하게 잘 적혀있는지 확인해주세요.
(참고로 jakarta.persistence 패키지를 사용해야 합니다.)
만약 해결이 안된다면 다음을 참고해서 전체 코드를 업로드 해주세요.
실제 동작하는 전체 프로젝트를 ZIP파일로 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.
주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요
추가로 다음 내용도 코멘트 부탁드립니다.
1. 문제 영역을 실행할 수 있는 방법
2. 문제가 어떻게 나타나는지에 대한 상세한 설명 (오류 화면, 오류 로그 포함)
링크: 공식 서포터즈
링크: 자주하는 질문
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 우기님께서 GitPod 환경에서 JPA를 사용하면서 Unable to locate persister
오류가 발생하셨다고 하셨네요. 해당 오류는 대개 JPA 엔티티 클래스가 Hibernate에 의해 인식되지 않을 때 발생합니다. 이 문제를 해결하기 위해 몇 가지 점검해보실 부분을 안내드리겠습니다.
엔티티 클래스 설정 확인:
@Entity
어노테이션이 Member
클래스에 올바르게 적용되어 있는지 확인하세요.@Entity
어노테이션과 @Table
어노테이션을 포함하도록 해야 합니다.패키지 구조 및 클래스 경로 확인:
Member
클래스가 올바른 경로에 존재하는지 확인하고, persistence.xml
내 <class>
태그에 명시되어 있는 클래스 경로와 일치하는지 확인하세요.persistence.xml
에 특정 클래스를 명시하지 않았다면, persistence.xml
의 <class>
태그에 해당 클래스를 추가해 확인해 보십시오.자동 스캔 설정:
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=
의존성 문제 확인:
build.gradle
파일의 의존성 설정이 올바른지 점검하세요. 또한 hibernate-core
등 필요한 JPA 관련 의존성이 제대로 추가되어 있는지도 확인해 주세요.데이터베이스 연결 문제 확인:
persistence.xml
에 jakarta.persistence.jdbc.url
설정 값을 점검하고, 올바른 데이터베이스 URL을 사용하는지 확인하세요.추가적으로 같은 문제에 대해 유사한 사례와 해결 방안이 논의된 게시글을 참고하시기 바랍니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
해당 문제 다음과 같이 해결했습니다 !
말씀해주신, Member 클래스에는 @Entity 어노테이션은 기존에 존재하고 있었습니다.
(엔티티 어노테이션을 여러 개 지웠다가 해봐도 도저히 작동이 안되었습니다.)
해결 방법은
persistence.xml 파일에 유닛 태그 내부에 인식하지 못하는 엔티티 클래스를 별도로
등록하니, JPA가 엔티티를 인식하여 persist 메소드를 정상적으로 호출하네요.
질문입니다.
Gitpod 클라우드 환경에서는 별도의 h2 DB를 설치없이 h2 DB에 접속이 가능합니다. 해당 환경에서 H2 DB가 어디서 어떻게 동작하는지 추적할 수 있는 방법을 알려주실 수 있나요?