java - JOOQ PostgreSQL 连接导致 InvalidResultException

标签 java postgresql jooq

我正在尝试连接 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/

相关文章:

c++ - pqxx 重用/重新激活工作事务

python - Web2py - 使用单独的 SQL 数据库进行归档时的键/约束问题

sql - 在 WHERE 中引用 unnest(或其他 srf)的值

java - 使用 jooq 插入间隔数据

java - 无法让 Java 正则表达式正确匹配

java - map 上的 jackson 补丁对象

java - 通过连接表的特定分区与另一个表的查询返回部分字段

Java 泛型和 jOOQ - 如何创建一个 jOOQ 列到另一列的 HashMap

java - NullPointerException是如何实现的?

java - 我是否需要在实现时再次@Nonnull?