当前位置: 首页 > 知识库问答 >
问题:

新的Flyway迁移打破了现有jOOQ生成的代码

喻子航
2023-03-14

我目前使用jOOQ从我的数据库和Flyway生成Java代码来管理我的二进制(Java)迁移以及SQL迁移。

但是,在修改现有表时遇到了问题。例如,如果我要在一次迁移中删除一列,而过去的二进制迁移依赖于该列,那么迁移将出现语法错误,因为该字段将不再存在于jOOQ中。

我知道我可以注释掉迁移的主体,但是如果我不能重新运行迁移或使迁移变得非常乏味(运行1迁移、取消注释、运行下一步、生成jOOQ等),那么这就违背了Flyway或任何类型的数据库版本管理器的全部目的

有没有更好的方法来解决这个问题?

共有1个答案

韶亮
2023-03-14

我认为这是一个工作流问题。

您在每次迁移中都有效地升级了一个API,期望该API的传统消费者继续工作简直是奇迹。

jOOQ是一个很棒的工具,但是在这种情况下使用它(帮助迁移)肯定会带来麻烦。

我的建议是重新考虑你的模式进化策略;使用Flyway自然使用的原始SQL,而将jOOQ留给专门帮助您的应用程序。

 类似资料:
  • 我更改了数据库中的一些表,所以我想生成记录、键、类等。但是每次我这样做时,它总是跳过jooq代码生成。 [INFO]--jooq-codegen-maven:3.11.10:generate(默认cli)@http网关--[INFO]跳过jooq代码生成 为了运行Jooq代码生成,我应该执行哪个mvn cmd?现在我使用: 谢谢

  • 我正在flyway的CMD中运行命令,但脚本文件的迁移会出现以下异常 [错误]无法执行目标组织。flywaydb:flyway maven插件:3.2.1:在convertopia auto db:org项目上迁移(默认cli)。flywaydb。果心应用程序编程接口。FlywayException:验证失败。迁移1.0.53的迁移描述不匹配[错误]- 我尝试过,它说构建成功,但问题仍然没有解决。

  • 我有一个flyway项目,在对数据库运行迁移之前,我想运行一个java回调来更改某些sql文件的名称。不幸的是,迁移首先针对数据库运行,然后调用回调来更改文件名。 这是我的回调类: 但是在< code>schema_version表中,我看到以下条目: 它应该说 如何让flyway在运行迁移之前更改文件名? 编辑1:所以看起来flyway正在运行迁移,然后执行回调以更改文件名,然后再次运行迁移,因

  • 我们面临一个问题:假设一个开发人员在处理分支a的过程中提供了一个新的迁移版本,比如说V331,同时一个QA人员在另一个分支B的QA环境中进行QA。可能会出现qa环境已经有v331版本的情况,因为几个开发人员可能会在不同的时间在不同的分支上创建相同的版本号……更多的是qa经常在分支之间切换,这就是qa数据库变得混乱的原因,特别是表schema_version,这导致我们手动删除损坏的模式版本,解决旧

  • 我使用jOOQ程序代码生成数据库,但现在我遇到了一些问题。在数据库中,我有表A和表B。第一次都生成了pojo、dao、接口等。经过一段时间的开发,我发现表A需要添加一些字段或修改一些字段,所以我不得不再次编码,然后jOOQ代码生成器将覆盖现有的代码,这让我很难过。当我在排除表的情况下使用“排除A”时,发现只生成了表A的数据,表B将被删除。我不知道如何处理这个问题。我的代码生成器如下:

  • 是否有任何参数可以在jooq代码生成期间打开/关闭下一个查询的执行? 在有大量模式和对象的数据库上,执行大约需要一个小时