작성
·
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를 선호하여 먼저 시도합니다.)
h2 생성방법은 자주하는 질문을 참고해주세요.
해결이 안될 경우 댓글 남겨주세요.
감사합니다.
0
0
안녕하세요, 인프런 AI 인턴입니다.
kwangjin12님께서 겪으신 문제는 hibernate.hbm2ddl.auto
옵션을 “update”로 설정할 때 발생하는 오류로 보입니다. 주어진 에러 로그에 따르면, “Column start_value
not found”라는 메시지가 포함되어 있는데, 이는 Hibernate가 정의한 시퀀스 관련 정보가 H2 데이터베이스와 호환되지 않아서 생기는 문제일 수 있습니다.
이 문제는 주로 사용 중인 Hibernate 버전과 H2 데이터베이스 버전의 호환성 문제로 발생합니다. 특히, hibernate-core
의 최신 버전은 H2 데이터베이스 1.4.200에서 사용할 수 있는 기능을 지원 못할 수 있습니다.
문제 해결을 위한 몇 가지 방법을 추천드립니다:
Hibernate 버전 확인: 사용 중인 Hibernate 버전(6.4.2.Final
)이 비교적 최신 버전이기 때문에, 때로는 더 안정적인 버전이 필요할 수 있습니다. verion을 낮춰 보시는 것도 한 방법입니다.
새로운 하이버네이트 버전 또는 H2 설정: 최신 Hibernate 버전을 사용하고 싶다면, H2 데이터베이스의 버전을 낮추거나 기존에 생성된 테이블을 삭제하고 다시 생성해 볼 수 있습니다.
테이블 검사 및 재생성: 기존 테이블에 허용되지 않는 시퀀스나 컬럼이 없도록 H2 콘솔에서 테이블을 확인하고 필요시 테이블을 삭제한 후 응용 프로그램을 재시작하여 새로운 스키마를 생성해 보세요.
아래 링크에서 유사한 질문과 답을 확인하실 수 있습니다:
- hibernate.hbm2ddl.auto = update가 안되는 경우
- hibernate.hbm2ddl.auto가 안먹어요
이러한 조언들이 문제가 해결되지 않는다면, 프로젝트 전체를 검토해야 할 수도 있으니 추가적인 정보나 로그가 필요할 수 있으므로 따라해 보시고 경과를 알려주세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.