在 jOOQ 中设置 PostgreSQL search_path

Set PostgreSQL search_path in jOOQ

回到 jOOQ 2.5,看起来你可以通过 FactoryOperations class 设置 PostgreSQL search_path,但是 class 在 jOOQ 3.5 中消失了。显然 FactoryOperations 分为 DSL 和 DSLContext,但我似乎无法找到 use(Schema) 方法的结束位置。我们如何在更新版本的 jOOQ 中设置 PostgreSQL search_path?

当 jOOQ 3.0 发布时,其中一些 "legacy" 功能被删除,主要是因为它们没有经过深思熟虑。在这种特殊情况下,use(Schema) 方法假装 jOOQ 支持的不同 RDBMS 实际上对 "current schema" 是什么有共同的想法。然而,对于那些将 jOOQ 与多个数据库一起使用的用户,该实现有点误导和混淆。

More information on the jOOQ 3.0 feature removals here.

今天的解决办法是

1。使用特定于供应商的命令,例如

ALTER USER my_user SET search_path = ...

More info about that here

2。使用 jOOQ 的运行时间模式映射功能

使用此功能,您可以在 运行 时指定 jOOQ 生成的真实模式名称。例如,如果您生成的代码中的模式是 FOO 并且生成的 "ordinary" SQL 语句将如下所示:

SELECT foo.table.column FROM foo.table

您可以指定从 FOOBAR 的映射,让 jOOQ 生成以下 SQL,而无需触及您的 Java 代码:

SELECT bar.table.column FROM bar.table

More info about that here