休眠自动 SQL 迁移脚本创建在模式更新上,以便与飞行路线一起使用



我们有一个Java Spring Boot应用程序,使用hibernate和PostgreSQL数据库,并希望使用flyway进行版本控制。我们已经弄清楚了如何使用 flyway 本身并配置 hibernate 来创建包含 databse 设置的 sql 文件。我们还没有弄清楚,如何让hibernate创建描述新旧模式之间差异的最小sql文件,这些文件将用作迁移脚本。最重要的是,我们没有弄清楚是否有办法自动化整个迁移过程。

我们通读了大量文档和堆栈溢出问题。他们都没有完全解释如何设置我们请求的行为。这个问题最接近我们想要实现的目标,但解释说不可能通过 flyway + 休眠来完成这种行为。虽然这个问题很老(3 年),但我们希望它现在可能起作用?

我们当前关于休眠的 Spring 配置如下所示:

spring:
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQL95Dialect
hbm2ddl:
delimiter: ;
javax:
persistence:
schema-generation:
create-source: metadata
create-database-schemas: true
scripts:
action: create
create-target: src/main/resources/ddl_hibernate_creation.sql

这会产生一个模式创建 sql 就可以了。尽管这在升级架构时是不够的。

如前所述,我们寻找一种方法来至少半自动化整个迁移过程(hibernate至少应该创建一个适当的"diff"文件,可以手动应用于生产/开发)。

您可以使用update脚本操作来生成差异脚本。 它将把从代码生成的模式与数据库中的模式进行比较, 因此,请确保在生成新迁移之前应用所有现有迁移。此外,它不会检测到所有更改,因此仍然需要自己进行审查。最好也生成创建脚本来检查差异。

要使其成为半自动,您可以将此配置放在不同的配置文件中。 使用新配置文件运行以生成迁移。 将脚本复制到预期位置。

示例配置:

spring:
profiles: migration
jpa:
properties:
javax:
persistence:
schema-generation:
create-source: metadata
scripts:
action: update
create-target: src/main/resources/ddl_hibernate_migration.sql

最新更新