【问题标题】:Spring Boot fails to create database schemaSpring Boot 无法创建数据库架构
【发布时间】:2017-11-11 01:32:52
【问题描述】:

我的 Spring Boot Web 应用程序中有以下实体,它们都定义在 entities 包中:

AccessPath.java
Component.java
ComponentInstance.java
ComponentOrder.java
Customer.java
HardwareComponent.java
HardwareGraphicsComponent.java
HardwareProcessingComponent.java
HardwareRamComponent.java
HardwareStorageComponent.java
Invoice.java
Manager.java
Order.java
Product.java
Report.java
ScmManager.java
ScmStaff.java
SoftwareComponent.java
Staff.java
Supplier.java
User.java
WarehouseManager.java

我正在使用正确配置的 PostgreSQL 实例作为数据库:

spring.thymeleaf.cache=false
#
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/foundationdb
spring.datasource.username=foundationdb
spring.datasource.password=
#
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create-drop

使用gradle bootRun 运行应用程序时,我收到很多关于无效 SQL 语句的错误消息。似乎框架试图以错误的顺序创建表,并且基本上无法为具有某种关系的任何实体创建表。例如,用于创建 order 表的 SQL 失败并出现以下错误很可能是因为尚未创建 order 具有外键的 customer 表。

2017-06-09 10:51:35.737 ERROR 85908 --- [           main] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: create table order (id int8 not null, assembly_date date, confirmation_date date, creation_date date, shipping_date date, status varchar(255), customer_username varchar(255), product_id int8, primary key (id))
2017-06-09 10:51:35.737 ERROR 85908 --- [           main] org.hibernate.tool.hbm2ddl.SchemaExport  : ERROR: syntax error at or near "order"

最后创建的唯一表是:

List of relations
Schema |            Name             | Type  |    Owner
--------+-----------------------------+-------+--------------
public | component                   | table | foundationdb
public | component_instance          | table | foundationdb
public | component_order             | table | foundationdb
public | invoice                     | table | foundationdb
public | product                     | table | foundationdb
public | product_software_components | table | foundationdb
public | report                      | table | foundationdb
public | supplier                    | table | foundationdb

起初我的实体分散在不同的包中,我尝试将它们全部放在一个包中以简化流程,但这没有帮助。

这绝对是与框架相关的问题,因为使用内存中的 h2HSQLDB 实例进行测试会导致类似的错误。

所有这些类的源代码都可以在这里找到: https://gist.github.com/Parsoa/f463fbef548f3a678c1e067e9aad5b21

感谢任何帮助。

【问题讨论】:

    标签: postgresql hibernate jpa spring-boot


    【解决方案1】:

    order 是保留的 SQL 关键字 (order by ...)。为您的表选择其他名称。

    如错误信息所示,与外键无关:

    ERROR: syntax error at or near "order"
    

    【讨论】:

    • 我有一种感觉,它必须是一些微妙的东西,我应该把这些关键字的列表放在手边。 user 似乎也是另一个关键字,所以我是否应该考虑更改它?
    • 确实如此。并不是说您不需要更改实体的名称。只有表的名称。
    • 谢谢,你拯救了我的一天。
    猜你喜欢
    • 2016-10-11
    • 2016-08-09
    • 2021-10-30
    • 2015-01-08
    • 1970-01-01
    • 2021-04-21
    • 2013-11-13
    • 1970-01-01
    • 2019-07-20
    相关资源
    最近更新 更多