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

kwangjin12님의 프로필 이미지
kwangjin12

작성한 질문수

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

데이터베이스 스키마 자동 생성

auto = update

작성

·

49

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 있지만 적용이 안 됩니다
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예

[질문 내용]

<property name="hibernate.hbm2ddl.auto" value="update" />


update 옵션 사용시에 에러가 발생합니다.
h2 database는 1.4.200 버전으로 변경 후 사용하고 있습니다 (기존 2.xx)

아무리 찾아봐도.. 이거 해결책이 안 보이는데, 버전이 잘못 되거나 다른 이슈가 있을까요..?
에러 로그는

```

Exception in thread "main" jakarta.persistence.PersistenceException: [PersistenceUnit: hello] Unable to build Hibernate SessionFactory

at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1591)

at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1512)

at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:55)

at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:80)

at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)

at hellojpa.JpaMain.main(JpaMain.java:13)

Caused by: org.hibernate.exception.SQLGrammarException: Unable to build DatabaseInformation [Column "start_value" not found [42122-200]] [n/a]

at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:66)

at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:58)

at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108)

at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:94)

at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:194)

at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:98)

at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:286)

at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.lambda$process$5(SchemaManagementToolCoordinator.java:145)

at java.base/java.util.HashMap.forEach(HashMap.java:1429)

at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:142)

at org.hibernate.boot.internal.SessionFactoryObserverForSchemaExport.sessionFactoryCreated(SessionFactoryObserverForSchemaExport.java:37)

at org.hibernate.internal.SessionFactoryObserverChain.sessionFactoryCreated(SessionFactoryObserverChain.java:35)

at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:315)

at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:450)

at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1507)

... 4 more

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "start_value" not found [42122-200]

at org.h2.message.DbException.getJdbcSQLException(DbException.java:453)

at org.h2.message.DbException.getJdbcSQLException(DbException.java:429)

at org.h2.message.DbException.get(DbException.java:205)

at org.h2.message.DbException.get(DbException.java:181)

at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3169)

at org.h2.jdbc.JdbcResultSet.get(JdbcResultSet.java:3268)

at org.h2.jdbc.JdbcResultSet.getLong(JdbcResultSet.java:680)

at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.resultSetStartValueSize(SequenceInformationExtractorLegacyImpl.java:110)

at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.lambda$extractMetadata$0(SequenceInformationExtractorLegacyImpl.java:54)

at org.hibernate.tool.schema.extract.spi.ExtractionContext.getQueryResults(ExtractionContext.java:50)

at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:39)

at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.initializeSequences(DatabaseInformationImpl.java:66)

at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.<init>(DatabaseInformationImpl.java:60)

at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:185)

... 14 more
```

 

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>jpa-basic</groupId>
    <artifactId>ex1-hello-jpa</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>ex1-hello-jpa</name>
    <description>ex1-hello-jpa</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>21</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- JPA 하이버네이트 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>6.4.2.Final</version>
        </dependency>

        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>

        <!-- H2 데이터베이스 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.200</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>


```

답변 3

0

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

버전 싱크를 맞추기 위해 많은 시도를 해보셨네요 😀

질문에 남기신 해결책에는 DB를 삭제 후 재설치 했다는 내용이 없어서

DB도 같이 초기화를 한 상태에서 확인이 필요 할 것 같아요.

아래와 같이 버전 및 싱크를 맞춰서 진행해주세요.

 

하위 버전 싱크

자바: 11

하이버네이트: 5.x

h2: 1.4.200

 

상위 버전 싱크

자바: 17~21

하이버네이트:6 .x

h2: 2.1.214 or 2.2.224

 

h2의 버전이 변경되었을 때 기존에 생성된 mv.db 확장자 DB파일(ex) test.mv.db)을 삭제하고 새로 생성해서 확인해주세요. ( 개인적으로 아래의 해결방안1과 해결방안2 중 해결방안2를 선호하여 먼저 시도합니다.)

https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit?tab=t.0#heading=h.3ryn0qha48vi

h2 생성방법은 자주하는 질문을 참고해주세요.

 

해결이 안될 경우 댓글 남겨주세요.

감사합니다.

0

kwangjin12님의 프로필 이미지
kwangjin12
질문자

h2는 1.4.200으로 사용하고 있고, h2 여러번 재설치 했습니다.

hibernate 5.x로 낮춰봐도 바뀌는 게 없습니다 ㅠㅠ

0

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

kwangjin12님께서 겪으신 문제는 hibernate.hbm2ddl.auto 옵션을 “update”로 설정할 때 발생하는 오류로 보입니다. 주어진 에러 로그에 따르면, “Column start_value not found”라는 메시지가 포함되어 있는데, 이는 Hibernate가 정의한 시퀀스 관련 정보가 H2 데이터베이스와 호환되지 않아서 생기는 문제일 수 있습니다.

이 문제는 주로 사용 중인 Hibernate 버전과 H2 데이터베이스 버전의 호환성 문제로 발생합니다. 특히, hibernate-core의 최신 버전은 H2 데이터베이스 1.4.200에서 사용할 수 있는 기능을 지원 못할 수 있습니다.

문제 해결을 위한 몇 가지 방법을 추천드립니다:

  1. Hibernate 버전 확인: 사용 중인 Hibernate 버전(6.4.2.Final)이 비교적 최신 버전이기 때문에, 때로는 더 안정적인 버전이 필요할 수 있습니다. verion을 낮춰 보시는 것도 한 방법입니다.

  2. 새로운 하이버네이트 버전 또는 H2 설정: 최신 Hibernate 버전을 사용하고 싶다면, H2 데이터베이스의 버전을 낮추거나 기존에 생성된 테이블을 삭제하고 다시 생성해 볼 수 있습니다.

  3. 테이블 검사 및 재생성: 기존 테이블에 허용되지 않는 시퀀스나 컬럼이 없도록 H2 콘솔에서 테이블을 확인하고 필요시 테이블을 삭제한 후 응용 프로그램을 재시작하여 새로운 스키마를 생성해 보세요.

아래 링크에서 유사한 질문과 답을 확인하실 수 있습니다:
- hibernate.hbm2ddl.auto = update가 안되는 경우
- hibernate.hbm2ddl.auto가 안먹어요

이러한 조언들이 문제가 해결되지 않는다면, 프로젝트 전체를 검토해야 할 수도 있으니 추가적인 정보나 로그가 필요할 수 있으므로 따라해 보시고 경과를 알려주세요.

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

kwangjin12님의 프로필 이미지
kwangjin12

작성한 질문수

질문하기