Jooq在生成的查询中动态更改db的架构

我在简单的数据库中有2个类似的模式 – “develop”和“stage”。 我已经使用Jooq为其中一个模式生成了Java类(例如“develop”)。 当jooq为db生成查询时,它会隐式地将模式的名称添加到所有查询的别名中

select "develop"."image"."id", "develop"."image"."image_data" from "develop"."image" where "develop"."image"."id" = ? 

所以我的问题是,是否有办法在生成的查询中更改jooq模式名称(对于“stage”作为示例)而不重新生成jooq的“stage”模式类?

您有几个选项,甚至可以组合使用:

使用代码生成器的架构映射function

如果要避免将"develop"模式名称硬连接到生成的类中,可以将其重写为其他模式名称,如下所示:

      develop stage  ... 

当然,这只是推迟了问题,因为模式名称仍然在生成的代码中。 您可以使用以下选项从生成的代码中完全删除名称:

      develop true  ... 

现在,这将从生成的代码中删除任何模式引用,因此生成的类可以在所有模式上运行(当然,请务必使用正确的连接和search_path!)

我认为这是您的最佳选择

更多细节: https : //www.jooq.org/doc/latest/manual/code-generation/codegen-advanced/codegen-config-catalog-and-schema-mapping/

使用运行时架构映射function

您可以保留生成的代码,并在运行时使用Settings (您提供给jOOQ运行时Configuration )重写所有对象引用。 同样,您有两个相同的选择:

映射架构名称:

 new Settings().withRenderMapping(new RenderMapping() .withSchemata(new MappedSchema() .withInput("develop") .withOutput("stage") ) ); 

删除所有模式名称:

 new Settings().withRenderSchema(false); 

更多细节: https : //www.jooq.org/doc/latest/manual/sql-building/dsl-context/custom-settings/settings-render-mapping/