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

使用JOOQ生成器的Playframework进化

谭泉
2023-03-14

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

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

我在考虑以下解决方案:

  1. 应用sbt的演变-创建sbt任务-到目前为止未能实现,

堆栈:

  • PlayFramework 2.3.8
  • Jooq 3.5.3
  • Java 8

请告知。

共有2个答案

卫君博
2023-03-14

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

上官扬
2023-03-14

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

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

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

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

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

 类似资料:
  • MySQL不接受此处生成的datetime值。我探索并发现jOOQ转换器可以用于自定义转换。我可以找到如何在获取数据时使用转换的示例,但无法弄清楚如何在查询时使用转换器。如何使用jOOQ转换器生成SQL而不生成代码?或者是否有更好的方法为SQL生成此查询。

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

  • 有时,当函数具有这样的签名时,它可能会变得毛茸茸的: 对于编译器来说,所有UUID都是相同的,因此希望在运行时被数据库捕获。 我喜欢jOOQ在编译时捕获许多问题的方式,我也想解决这个问题。我的目标是让每个表的每个键都有自己的类,并让这些字段正确生成pojos。 实现这一目标的最佳方法是什么?我想出了以下几点: 全面的JavaGenerator实现 具有大量强制类型映射的转换器,以及手动创建的键类

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

  • 当使用jOOQ的代码生成器时,它会拆分嵌套类以防止大型静态初始化器,而可能包含嵌套类,例如,... 我使用带有<代码> 但使用<代码> 这是jOOQ生成器中的错误吗?或者我需要添加其他配置

  • 我正在尝试JOOQ生成数据库模式,以便在spring boot中使用它。我使用以下maven配置: 这适用于具有单键的实体。它为表tbladdservice生成这样的代码: 但对于具有复合键的表(称为tbladdservicecon),它只生成: 这个问题(据我所知):缺少@Id。如果我打电话 我收到此错误(应用程序无法启动): 有没有办法说服JOOQ生成@Id语句? 非常感谢您的帮助。 为了更清