【问题标题】:Playframework Evolutions with JOOQ generator使用 JOOQ 生成器的 Playframework Evolutions
【发布时间】:2015-05-18 11:56:17
【问题描述】:

我使用的项目使用JOOQ 及其生成器从Postgres 数据库生成类。数据库演变由Play Evolutions 管理。我们还使用git 作为版本控制系统。这组工具在从git 获取新的进化/jooq 代码时会导致某种自引用问题:

由于缺少JOOQ 从这些表生成的类导致的编译问题,其他团队成员创建的新表的演变无法应用。

我正在考虑以下解决方案:

  1. 从 sbt 应用进化 - 创建 sbt 任务 - 到目前为止未能实施,
  2. 在 db 上手动应用进化(复制粘贴脚本) - 没有意义。

堆栈:

  • PlayFramework 2.3.8
  • Jooq 3.5.3
  • Java 8

请指教。

【问题讨论】:

    标签: playframework sbt jooq playframework-evolutions


    【解决方案1】:

    你可以写一个插件。 当应用程序启动时,插件会应用进化。

    【讨论】:

    • 我担心应用程序无法启动,因为它有编译问题。
    • 从 slick 的创建者(slick 可以从表中生成类)的谈话中,他建议始终为模型提交生成的类。
    • 是的,这是可能的解决方案之一。但是生成的类会被编辑,具有 JPA 背景的人可能会损坏项目。
    【解决方案2】:

    我建议在编译之前使用 SBT 生成代码。

    如果有一种简单的方法可以引导 JOOQ 代码生成器(例如通过静态方法,或通过创建生成器实例),您可以查看 here 以了解如何创建一个任务引导流程。

    然后,如果您希望在编译之前执行 SBT 任务,您可以这样做(如果您要调用任务generateJOOQ):

    compileInputs in (Compile, compile) <<= (compileInputs in (Compile, compile)) dependsOn (generateJOOQ in Compile)
    

    拥有一个 JOOQ SBT 插件会让事情变得更容易,但我认为创建这样一个插件的维护工作不应该被低估,因为需要满足不同的 SBT 版本和 JOOQ 版本。

    【讨论】:

    • 实际上,我创建了一个带有脚本的子项目,以编程方式运行进化,然后调用Jooq generator。我在编译之前运行脚本。
    猜你喜欢
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 2023-03-21
    • 2017-12-03
    • 2020-07-26
    • 2016-06-12
    • 2019-06-11
    • 2017-12-08
    相关资源
    最近更新 更多