如何解决 H2“执行 DDL 时出错”错误?

Posted

技术标签:

【中文标题】如何解决 H2“执行 DDL 时出错”错误?【英文标题】:How to solve H2 "Error executing DDL" error? 【发布时间】:2019-07-04 17:55:34 【问题描述】:

我想在springboot中通过H2创建表,但是运行时出现以下错误;

org.hibernate.dialect.Dialect:HHH000400:使用方言: org.hibernate.dialect.H2方言 org.hibernate.tool.schema.spi.CommandAcceptanceException:执行 DDL 时出错“创建表 bank_account(id bigint 不为空,余额 双非空,全名 varchar(128) 非空,主键 (id))" 通过 JDBC 语句

...

data.sql:

Insert into Bank_Account(ID, Full_Name, Balance) values (1, 'Ibrahim', 2500);
Insert into Bank_Account(ID, Full_Name, Balance) values (2, 'Ates', 4210);

pom.xml;

<dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>

Application.properties;

# H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2
# Datasource
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.datasource.continue-on-error=true
spring.jpa.hibernate.ddl-auto=create

我错过了什么?


解决方案;

问题是由实体的列名引起的。我已将名为“Full Name”的实体更改为“Full_Name”,然后问题就解决了。

【问题讨论】:

从你的 application.propeties 文件中显示你的休眠、数据库属性 我添加了问题的结尾... 好的,有映射到 Bank_Account 表的实体吗?如果是则显示 是的。就像跟随我一样; @Entity @Table(name="Bank_Account") 公共类 BankAccount ... 【参考方案1】:

问题似乎是由于您尝试使用 hibernate auto-ddl 工具以及 Spring Boots schema.sql 文件来初始化数据库。

根据文档:

在基于 JPA 的应用程序中,您可以选择让 Hibernate 创建模式 或使用schema.sql,但您不能同时使用两者。确保禁用 spring.jpa.hibernate.ddl-auto 如果你使用schema.sql

所以要么删除 spring.jpa.hibernate.ddl-auto=create 属性或 schema.sql 文件,这样 Spring Boot 就不会尝试拾取它。

【讨论】:

嗨,我删除了 schema.sql 文件。但它仍然无法正常工作。

以上是关于如何解决 H2“执行 DDL 时出错”错误?的主要内容,如果未能解决你的问题,请参考以下文章

org.hibernate.tool.schema.spi.CommandAcceptanceException:在使用 h2 和 JPA 的 SpringBoot 中通过 JDBC 语句执行 DDL

Spring Boot 应用程序 Heroku PostgreSQL 错误:GenerationTarget 遇到异常接受命令:执行 DDL 时出错 ...通过 JDBC 语句

org.hibernate.tool.schema.spi.CommandAcceptanceException:通过JDBC语句执行DDL时出错

GenerationTarget 遇到异常接受命令:通过 JDBC 语句执行 DDL 时出错

在 Spring Boot 2、Hibernate、PostgreSQL 中通过 JDBC 语句执行 DDL 时出错

H2 数据库:如何解锁数据库文件以进行备份?