[JPA] h2 hibernate.hbm2ddl.auto 안되는 에러

DANI·2023년 12월 16일
post-thumbnail

🚫 hibernate.hbm2ddl.auto가 적용 안되는 에러

1216, 2023 6:33:10 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@3f672204] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
1216, 2023 6:33:10 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@7f8633ae] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
1216, 2023 6:33:10 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException
WARN: GenerationTarget encountered exception accepting command : Error executing DDL "
    create table Member (
       id number(19,0) not null,
        name varchar2(255 char),
        primary key (id)
    )" via JDBC Statement
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "
    create table Member (
       id number(19,0) not null,
        name varchar2(255 char),
        primary key (id)
    )" via JDBC Statement
	at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67)
	at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java:458)
	at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlStrings(SchemaCreatorImpl.java:442)
	at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:325)
	at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:169)
	at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:138)
	at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:124)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:168)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:85)
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:335)
	at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:471)
	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1498)
	at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
	at helloJPA.helloJPA.main(helloJPA.java:19)
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "\000a    create table Member (\000a       id number(19,0) not null,\000a        name varchar2(255 [*]char),\000a        primary key (id)\000a    )"; expected "CHARACTERS, OCTETS, )"; SQL statement:

    create table Member (
       id number(19,0) not null,
        name varchar2(255 char),
        primary key (id)
    ) [42001-224]
	at org.h2.message.DbException.getJdbcSQLException(DbException.java:514)
	at org.h2.message.DbException.getJdbcSQLException(DbException.java:489)
	at org.h2.message.DbException.getSyntaxError(DbException.java:261)
	at org.h2.command.ParserBase.getSyntaxError(ParserBase.java:750)
	at org.h2.command.ParserBase.read(ParserBase.java:357)
	at org.h2.command.Parser.readIfDataType1(Parser.java:5921)
	at org.h2.command.Parser.readIfDataType(Parser.java:5704)
	at org.h2.command.Parser.parseColumnWithType(Parser.java:5686)
	at org.h2.command.Parser.parseColumnForTable(Parser.java:5565)
	at org.h2.command.Parser.parseTableColumnDefinition(Parser.java:8999)
	at org.h2.command.Parser.parseCreateTable(Parser.java:8939)
	at org.h2.command.Parser.parseCreate(Parser.java:6404)
	at org.h2.command.Parser.parsePrepared(Parser.java:666)
	at org.h2.command.Parser.parse(Parser.java:592)
	at org.h2.command.Parser.parse(Parser.java:569)
	at org.h2.command.Parser.prepareCommand(Parser.java:483)
	at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:639)
	at org.h2.server.TcpServerThread.process(TcpServerThread.java:289)
	at org.h2.server.TcpServerThread.run(TcpServerThread.java:191)
	at java.base/java.lang.Thread.run(Thread.java:842)

	at org.h2.message.DbException.getJdbcSQLException(DbException.java:514)
	at org.h2.engine.SessionRemote.readException(SessionRemote.java:650)
	at org.h2.engine.SessionRemote.done(SessionRemote.java:619)
	at org.h2.command.CommandRemote.prepare(CommandRemote.java:78)
	at org.h2.command.CommandRemote.<init>(CommandRemote.java:50)
	at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:487)
	at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1166)
	at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:245)
	at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:231)
	at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54)
	... 15 more

1216, 2023 6:33:10 오후 org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
Hibernate: 
    /* insert helloJPA.Member
        */ insert 
        into
            Member
            (name, id) 
        values
            (?, ?)
1216, 2023 6:33:10 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 42104, SQLState: 42S04
1216, 2023 6:33:10 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Table "MEMBER" not found (this database is empty); SQL statement:
/* insert helloJPA.Member */ insert into Member (name, id) values (?, ?) [42104-224]
1216, 2023 6:33:10 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stop
INFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/hello]

Process finished with exit code 0


아니.. h2 database에서 테이블을 생성 후 auto속성을 none으로 해두고 멤버를 추가했을 땐 정상적으로 insert문이 삽입되었지만, auto속성을 none이 아닌 다른 걸로 했을땐 계속 실행이 안되었다... 알고보니...

🔵 수정 전

<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle12cDialect"/>

방언 설정을 오라클로 해두고 있었다


🔴 수정 후

<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>           

🔑 해결~!!!

Hibernate: 
  
  drop table if exists Member CASCADE 
Hibernate: 
  
  create table Member (
     id bigint not null,
      name varchar(255),
      primary key (id)
  )
1216, 2023 6:50:23 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@67440de6] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
1216, 2023 6:50:23 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@3f672204] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
1216, 2023 6:50:23 오후 org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
Hibernate: 
  /* insert helloJPA.Member
      */ insert 
      into
          Member
          (name, id) 
      values
          (?, ?)
1216, 2023 6:50:23 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stop
INFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/hello]

Process finished with exit code 0


아주 바보 같은 에러 덕분에 몇시간을 헤맸다... ㅠㅠㅠㅠㅠ 하... 이것또한 경험이겠지... 이런 삽질...ㅠㅠㅠㅠㅠㅠ

0개의 댓글