我正在尝试连接 JOOQ 中的两个表并将结果输出为 Map<String, Object>
, 但我得到 InvalidResultException("Field common_id is not unique in Record")
.
我正在执行的代码如下:
dslContext.select()
.from(FOO)
.join(BAR).using(FOO.COMMON_ID)
.where(FOO.FOO_VALUE.eq(123))
.limit(1)
.fetchOne()
.intoMap();
生成的SQL是这样的:
SELECT "public"."foo"."foo_id",
"public"."foo"."common_id",
"public"."foo"."foo_value",
"public"."bar"."bar_id",
"public"."bar"."common_id",
"public"."bar"."bar_value",
"public"."bar"."bar_value_two"
FROM "public"."foo"
JOIN "public"."bar"
WHERE "public"."foo"."common_id" = ?
LIMIT ?;
我希望 JOOQ 明白我加入的值将出现在两个表中,并在结果 Record
中省略其中一个。 ,但它似乎并没有这样做。
我是不是漏掉了一些明显的东西?过滤掉重复项的最佳/正确方法是什么 common_id
来自结果 Record
这样打电话intoMap()
返回响应而不是抛出异常?
最佳答案
这是一个已知问题:https://github.com/jOOQ/jOOQ/issues/2808
不幸的是,jOOQ 对象模型从 JOIN .. USING
语法中生成重复的列,就好像您使用的是 JOIN .. ON
语法一样。解决方法是在 SELECT
子句中明确列出列,这在您的情况下可能是个好主意,因为您也可能在任何其他列名之间意外匹配(例如 last_update
,例如),或者您可以使用 Table.as(String, Function)
为您的表及其列添加别名, 自动生成一个[table_name]__[column_name]
scheme.
关于java - JOOQ PostgreSQL 连接导致 InvalidResultException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47942736/