创建 jpa 表后的 Flyway 迁移

Posted

技术标签:

【中文标题】创建 jpa 表后的 Flyway 迁移【英文标题】:Flyway migration after jpa tables have been created 【发布时间】:2019-03-03 07:39:28 【问题描述】:

我在 spring boot jpa 项目中使用 flyway 数据库迁移工具。当我第一次运行服务器时,flyway 想要迁移 sql,但尚未创建表。在这种情况下,flyway 返回一个类似于

的错误

Caused by: org.flywaydb.core.internal.command.DbMigrate$FlywayMigrateSqlException: Migration V1__countries_and_states.sql failed SQL State : 42S02 Error Code : 1146 Message : Table 'wallet.country' doesn't exist Location : db/migration/V1__countries_and_states.sql (/root/IdeaProjects/service/target/classes/db/migration/V1__countries_and_states.sql) Line : 1 我使用这些选项配置了 application.properties 文件:

spring.flyway.baseline-on-migrate=true spring.flyway.enabled=true spring.flyway.clean-on-validation-error=true spring.flyway.init-on-migrate=true

我希望我的迁移能够成功完成。

【问题讨论】:

您可能应该让 JPA 提供程序将 DDL 脚本输出到文件,而不是让它创建表 &c。在运行时即时运行。然后您可以将这些 DDL 脚本与 flyway 一起使用。无论如何,让普通应用程序执行 DDL 并不是一个好习惯。 【参考方案1】:

您的第一次迁移必须创建表!

阅读本教程:https://flywaydb.org/getstarted/firststeps/api

【讨论】:

谢谢 Simon Martinelli 但我想在休眠自动创建表后迁移 flyway sqls。我认为flyway是不可能的 另外这不是一个好主意!最好是让 hibernate 创建 SQL DDL 文件,然后改进它并用作第一次迁移。【参考方案2】:

可以使用如下配置属性:flyway.out-of-order = true。它说在 hibernate/jpa 创建/更新表后 flyway 工作。

【讨论】:

以上是关于创建 jpa 表后的 Flyway 迁移的主要内容,如果未能解决你的问题,请参考以下文章

Flyway Java 迁移在命令行工具中不起作用

Flyway 3.1 数据库迁移多个模式 - Oracle 11g

为啥flyway迁移需要JPA依赖才能运行

flyway 后的 Flyway 迁移错误:基线

Spring Data JPA / Flyway 转义双引号

自动生成 Flyway 的迁移 SQL