Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Hibernate在模式更新时自动创建SQL迁移脚本以用于flyway_Database_Spring_Hibernate_Flyway - Fatal编程技术网

Database Hibernate在模式更新时自动创建SQL迁移脚本以用于flyway

Database Hibernate在模式更新时自动创建SQL迁移脚本以用于flyway,database,spring,hibernate,flyway,Database,Spring,Hibernate,Flyway,我们有一个JavaSpring启动应用程序,使用hibernate和PostgreSQL数据库,并且希望使用flyway进行版本控制。我们已经了解了如何使用flyway本身并配置hibernate来创建包含数据库设置的sql文件。我们还没有弄清楚如何让hibernate创建最小的sql文件来描述新旧模式之间的差异,这将用作迁移脚本。最重要的是,我们没有弄清楚是否有办法自动化整个迁移过程 我们阅读了大量的文件和问题。他们中没有一个人完全解释了如何设置我们请求的行为。这个问题最接近于我们想要实现的目

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

我们阅读了大量的文件和问题。他们中没有一个人完全解释了如何设置我们请求的行为。这个问题最接近于我们想要实现的目标,但解释说使用flyway+hibernate不可能实现这样的行为。尽管这个问题已经很老了(3年了),我们还是希望它现在能起作用

我们当前关于hibernate的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
for your scripts操作生成diff脚本。 它会将代码生成的模式与数据库中的模式进行比较, 因此,请确保在生成新迁移之前应用所有现有迁移。而且,它不会检测到所有的更改,所以仍然需要自己进行检查。最好还生成create脚本来检查差异

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

示例配置:

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,因此我无法验证此解决方案:/如果此答案有助于其他人确认其有效性,我将愉快地接受此答案:)