我的Spring应用程序中有以下实体,它们都定义在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失败,很可能是因为customer表( order有外键)尚未创建。
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起初,我的实体分散在不同的包中,我试图将它们放在一个单独的包中,以简化流程,但这并没有帮助。
这无疑是一个与框架相关的问题,因为使用内存中的h2或HSQLDB实例进行测试会导致类似的错误。
所有这些类的源代码都可以在这里获得:https://gist.github.com/Parsoa/f463fbef548f3a678c1e067e9aad5b21
任何帮助都是非常感谢的。
发布于 2017-06-09 06:44:41
order是一个保留的SQL关键字(order by ...)。为您的表选择另一个名称。
正如错误消息所显示的,它与外键无关:
错误:语法错误在或接近“顺序”
https://stackoverflow.com/questions/44450895
复制相似问题