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

리자몽님의 프로필 이미지
리자몽

작성한 질문수

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

Hello JPA - 애플리케이션 개발

h2 커넥션 안되는 에러 질문이요

작성

·

4K

0

안녕하세요 

자바 ORM 표준 JPA 프로그래밍 - 기본편 강의를 듣던 중

에러가 발생해서 질문 남깁니다.

우선 다운받은 h2버전과 pom.xml에 있는 버전은 동일합니다.(강의에서 유의하라고 해서 최근 버전인 2.1.14 버전을 사용했습니다.)

우선 JpaMain 코드는 아래와 같습니다.

public class JpaMain {

public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");

EntityManager entityManager = emf.createEntityManager();

entityManager.clear();

emf.close();
}
}

 

현재 만든 파일은 JpaMain을 포함하여

pom.xml, persistence.xml 이렇게 3가지 입니다.

그런데 JpaMain 클래스를 실행시면 다음과 같은 에러가 발생합니다.

 

우선 에러는 크게 4가지입니다.

Exception in thread "main" org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

 

Caused by: org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect

 

Caused by: org.h2.jdbc.JdbcSQLNonTransientConnectionException: Unsupported database file version or invalid file header in file "C:/Users/kim/test.mv.db" [90048-214]

 

Caused by: org.h2.mvstore.MVStoreException: The write format 1 is smaller than the supported format 2 [2.1.214/5]

 

느낌상 기존에 h2 db를 사용한거랑 무언가 충돌이 일어난 느낌입니다..

에러 들을 검색해보면 hibernate 버전이나 h2database 버전문제로 확인이 되는데 저는 버전에는 문제가 없는 것으로 보입니다. 어디가 문제일까요?

 

pom.xml은 다음과 같습니다.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>jpa-basic</groupId>
<artifactId>ex1-hello-jpa</artifactId>
<version>1.0.0</version>
<dependencies>
<!-- JPA 하이버네이트 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.3.10.Final</version>
</dependency>
<!-- H2 데이터베이스 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
</dependency>
</dependencies>
</project>

 

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="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>

<!-- 옵션 -->
<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>

당연히 maven 업데이트는 했습니다.

답변 1

0

안녕하세요. 리자몽님, 공식 서포터즈 OMG입니다.

기존에 설치한 h2를 완전히 삭제 후, h2 버전 1.4.200 설치하여 확인해주세요.

 "C:/Users/kim/test.mv.db" 

h2 삭제 후 해당 경로의 test.mv.db 파일을 삭제해주세요.


감사합니다.

 
리자몽님의 프로필 이미지
리자몽
질문자

답변 감사합니다.

참고로 저는 h2 버전을 홈페이지에 있는 버전인 2.1.214 버전을 다운 받았고 persistence.xml에도 2.1.214버전을 입력했습니다. 굳이 1.4.200 버전을 다운 받아야하는 이유가 있나요?

일단 그러면 h2를 다운로드받은

bin 폴더가 있는 C:\Program Files (x86)\H2 폴더를 삭제하고

 "C:/Users/kim/test.mv.db"  를 삭제하고 다시

H2를 설치하면 될까요?

 

그러면 걸리는 것이기존에 H2 파일을 사용하고 있던 프로젝트들은 실행이 안될것 같은데..

그점은 어떻게.. 하면 좋을까요?

참고로 이전에 프로젝트할 떄는 H2 홈페이지가서 설치를 안하고 그냥 gradle에서 추가를 해서 사용을 했었습니다.

test.mv.db를 복사하여 다른 경로에 백업해두시고, 확인해보셔도 됩니다.

강의에서 진행한 것과 같이 실제 h2 프로그램을 설치하여 진행해주세요.

리자몽님의 프로필 이미지
리자몽

작성한 질문수

질문하기