JPA - Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Sequence "HIBERNATE_SEQUENCE" not found; SQL statement: call next value for hibernate_sequence [90036-214]

Yung·2022년 10월 15일

JPA

목록 보기
2/4

Board

package com.rubypaper.domain;

import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * Entity implementation class for Entity: Board
 *
 */

// @Entity
// @Entity가 설정된 클래스를 엔티티라 하며, 
// 기본적으로 클래스 이름과 동일한 테이블과 매핑된다.
// @Table
// 엔티티 이름과 매핑될 테이블 이름이 다른 경우, name 속성을 사용하여, 매핑한다.
// 엔티티 이름과 테이블 이름이 동일하면 생략해도 된다.
// @Id
// 테이블의 기본 키를 매핑한다. 예제에서는 seq변수가 테이블의 SEQ칼럼과 매핑되도록 설정
// @GeneratedValue

@Entity
@Table(name = "BOARD")
public class Board {
  @Id
  // 
  @GeneratedValue //(strategy = GenerationType.IDENTITY)
  private Long seq;
  private String title;
  private String writer;
  private String content;
  private Date createDate;
  private Long cnt;

  public Long getSeq() {
    return seq;
  }

  public void setSeq(Long seq) {
    this.seq = seq;
  }

  public String getTitle() {
    return title;
  }

  public void setTitle(String title) {
    this.title = title;
  }

  public String getWriter() {
    return writer;
  }

  public void setWriter(String writer) {
    this.writer = writer;
  }

  public String getContent() {
    return content;
  }

  public void setContent(String content) {
    this.content = content;
  }

  public Date getCreateDate() {
    return createDate;
  }

  public void setCreateDate(Date createDate) {
    this.createDate = createDate;
  }

  public Long getCnt() {
    return cnt;
  }

  public void setCnt(Long cnt) {
    this.cnt = cnt;
  }

  @Override
  public String toString() {
    return "Board [seq=" + seq + ", title=" + title + ", writer=" + writer + ", content=" + content
        + ", createDate=" + createDate + ", cnt=" + cnt + "]";
  }


}

pom.xml

<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>com.rubypaper</groupId>
  <artifactId>Chapter04</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>Chapter04</name>
  <url>http://maven.apache.org</url>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <!--JPA hibernate -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.3.10.Final</version>
        </dependency>

        <!-- H2 DATABASE -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.199</version>
        </dependency>

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

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
	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_1.xsd">
	<persistence-unit name="Chapter04">
		<class>com.rubypaper.domain.Board</class>
		<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>

javaClient

package com.rubypaper;

import java.util.Date;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.rubypaper.domain.Board;

public class JPAClient {
  public static void main(String[] args) {
    // EntityManger 생성
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("Chapter04");
    EntityManager em = emf.createEntityManager();
    try {
      Board board = new Board();
      board.setTitle("JPA 제목");
      board.setWriter("관리자");
      board.setContent("JPA 글 등록 잘 되네요.");
      board.setCreateDate(new Date());
      board.setCnt(0L);

      // 글 등록
      em.persist(board);

    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      em.close();
      emf.close();
    }
  }
}

에러코드

10월 15, 2022 2:14:28 오후 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [
	name: Chapter04
	...]
10월 15, 2022 2:14:28 오후 org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.3.10.Final}
10월 15, 2022 2:14:28 오후 org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
10월 15, 2022 2:14:28 오후 org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
10월 15, 2022 2:14:28 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
10월 15, 2022 2:14:28 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [org.h2.Driver] at URL [jdbc:h2:tcp://localhost/~/test]
10월 15, 2022 2:14:28 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {user=sa}
10월 15, 2022 2:14:28 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
10월 15, 2022 2:14:28 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
10월 15, 2022 2:14:28 오후 org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
Hibernate: 
    call next value for hibernate_sequence
10월 15, 2022 2:14:28 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 90036, SQLState: 90036
10월 15, 2022 2:14:28 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Sequence "HIBERNATE_SEQUENCE" not found; SQL statement:
call next value for hibernate_sequence [90036-199]
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not prepare statement
	at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
	at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
	at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)
	at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:807)
	at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:785)
	at com.rubypaper.JPAClient.main(JPAClient.java:23)
Caused by: org.hibernate.exception.SQLGrammarException: could not prepare statement
	at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63)
	at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
	at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
	at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:182)
	at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement(StatementPreparerImpl.java:72)
	at org.hibernate.id.enhanced.SequenceStructure$1.getNextValue(SequenceStructure.java:93)
	at org.hibernate.id.enhanced.NoopOptimizer.generate(NoopOptimizer.java:40)
	at org.hibernate.id.enhanced.SequenceStyleGenerator.generate(SequenceStyleGenerator.java:482)
	at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:119)
	at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:192)
	at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:135)
	at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:62)
	at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:800)
	... 2 more
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Sequence "HIBERNATE_SEQUENCE" not found; SQL statement:
call next value for hibernate_sequence [90036-214]
	at org.h2.message.DbException.getJdbcSQLException(DbException.java:632)
	at org.h2.message.DbException.getJdbcSQLException(DbException.java:477)
	at org.h2.message.DbException.get(DbException.java:223)
	at org.h2.message.DbException.get(DbException.java:199)
	at org.h2.command.Parser.readSequence(Parser.java:8471)
	at org.h2.command.Parser.readTermWithIdentifier(Parser.java:5347)
	at org.h2.command.Parser.readTermWithIdentifier(Parser.java:5217)
	at org.h2.command.Parser.readTerm(Parser.java:4901)
	at org.h2.command.Parser.readFactor(Parser.java:3398)
	at org.h2.command.Parser.readSum(Parser.java:3385)
	at org.h2.command.Parser.readConcat(Parser.java:3350)
	at org.h2.command.Parser.readCondition(Parser.java:3132)
	at org.h2.command.Parser.readExpression(Parser.java:3053)
	at org.h2.command.Parser.parseCall(Parser.java:6980)
	at org.h2.command.Parser.parsePrepared(Parser.java:765)
	at org.h2.command.Parser.parse(Parser.java:689)
	at org.h2.command.Parser.parse(Parser.java:661)
	at org.h2.command.Parser.prepareCommand(Parser.java:569)
	at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:631)
	at org.h2.server.TcpServerThread.process(TcpServerThread.java:288)
	at org.h2.server.TcpServerThread.run(TcpServerThread.java:191)
	at java.base/java.lang.Thread.run(Thread.java:833)

	at org.h2.message.DbException.getJdbcSQLException(DbException.java:573)
	at org.h2.engine.SessionRemote.done(SessionRemote.java:607)
	at org.h2.command.CommandRemote.prepare(CommandRemote.java:85)
	at org.h2.command.CommandRemote.<init>(CommandRemote.java:51)
	at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:477)
	at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1292)
	at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:77)
	at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:349)
	at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$1.doPrepare(StatementPreparerImpl.java:87)
	at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:172)
	... 11 more
10월 15, 2022 2:14:28 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop
INFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/test]
##

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Sequence "HIBERNATE_SEQUENCE" not found; SQL statement:
call next value for hibernate_sequence [90036-214]
데이터 등록 처리 중 해당 에러 발생 (테이블 시퀀스 값이 없다는 상황)

<property name="hibernate.hbm2ddl.auto" value="create" />
JPA가 테이블가 시퀸스를 자동으로 생성할 수 있던것은 persistence.xml파일에 'hibernate.hbm2ddl.auto'속성 값을 'create'로 설정했기 때문이다.

https://stackoverflow.com/questions/39807483/sequence-hibernate-sequence-not-found-sql-statement

0개의 댓글