1

我的问题很简单。在 Spring 的自动模式创建之后如何运行任何 DDL 语句?

我在 application-test.properties 中设置了以下内容,以从实体 Java 类自动创建数据库模式。

spring.jpa.hibernate.ddl-auto=create-drop

自动创建架构后,我想更改一张表中一列的数据类型。

我尝试在类路径中有一个 schema.sql 文件,但这没有帮助。

请提供任何帮助。

4

1 回答 1

2

您在脚本中指定的脚本将在创建数据库之前运行。因此,当您触发 Alter table 命令时,您将得到 Table not found 类型的错误。我的建议是仅通过 SQL 文件创建数据库并设置 spring.jpa.hibernate.ddl-auto=none 以便系统不会创建自动数据库。

现在要让您的 SQL 文件运行,您可以创建架构并根据平台对其进行初始化。平台值是 spring.datasource.platform。现在您可以创建由 Spring Boot 处理的文件 schema-${platform}.sql 和 data-${platform}.sql。它允许您在必要时选择特定于数据库的脚本。您可以选择数据库(平台)的供应商名称,如 hsqldb、h2、oracle、mysql、postgresql 等。

我已经用 postgres 进行了测试,它对我有用。Sql 文件名为 schema-postgres.sql 在 application.properties 文件中设置以下属性

    spring.jpa.database=POSTGRESQL
    spring.datasource.platform=postgres
    spring.datasource.url=jdbc:postgresql://localhost:5432/poc
    spring.datasource.username=postgres
    spring.datasource.password=postgres
    spring.jpa.hibernate.ddl-auto=none
    spring.datasource.initialization-mode=always
于 2020-06-11T03:34:22.290 回答