我在简单数据库中有两个类似的模式 - “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”模式类?
答案 0 :(得分:7)
您有几个选项,甚至可以合并:
如果您想避免将"develop"
模式名称硬连接到生成的类中,可以将其重写为其他模式名称,如下所示:
<configuration>
<generator>
<database>
<schemata>
<schema>
<inputSchema>develop</inputSchema>
<outputSchema>stage</outputSchema>
</schema>
...
当然,这只是推迟了问题,因为架构名称仍在生成的代码中。您可以使用以下选项从生成的代码中完全删除名称:
<configuration>
<generator>
<database>
<schemata>
<schema>
<inputSchema>develop</inputSchema>
<outputSchemaToDefault>true</outputSchemaToDefault>
</schema>
...
现在将从生成的代码中删除任何模式引用,因此生成的类可以在所有模式上运行(当然,请确保使用正确的连接和search_path!)
我认为这是您的最佳选择
您可以保留生成的代码,并使用Settings
(您提供给jOOQ运行时Configuration
)在运行时重写所有对象引用。同样,您有两个相同的选择:
映射架构名称:
new Settings().withRenderMapping(new RenderMapping()
.withSchemata(new MappedSchema()
.withInput("develop")
.withOutput("stage")
)
);
删除所有架构名称:
new Settings().withRenderSchema(false);