【问题标题】:Hibernate automatic SQL migrate script creation on schema updates for use with flyway在模式更新上创建 Hibernate 自动 SQL 迁移脚本以与 flyway 一起使用
【发布时间】:2019-12-02 10:31:23
【问题描述】:

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

我们通读了大量文档和 stackoverflow 问题。他们都没有完全解释如何设置我们请求的行为。 This 问题最接近我们想要实现的目标,但解释说使用 flyway + hibernate 无法完成这种行为。尽管这个问题已经很老了(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”文件)。

【问题讨论】:

    标签: database spring hibernate flyway


    【解决方案1】:

    您可以使用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
    

    【讨论】:

    • 感谢您的回答!我会接受它,但是当我们改用 liquibase 时,我们不再需要 flyway,因此我无法验证这个解决方案:/ 如果这个答案可以帮助其他可以确认它有效的人,我会很乐意接受这个答案: )
    猜你喜欢
    • 2017-03-27
    • 2018-02-28
    • 2013-12-23
    • 2020-07-20
    • 2019-01-09
    • 2016-06-29
    • 2021-05-13
    • 1970-01-01
    • 2021-12-02
    相关资源
    最近更新 更多