如何解决 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 时出错