JOOQ 连接两个具有相同列名的表

Posted

技术标签:

【中文标题】JOOQ 连接两个具有相同列名的表【英文标题】:JOOQ join two tables with same column names 【发布时间】:2021-11-25 07:00:42 【问题描述】:

我正在使用运行以下 JOOQ 查询:

dsl.select().from(table).join(joinTable).on(joinCondition).where(condition).fetchInto(entityClass);

table 和 joinTable 都以 id 作为主键名称,但获取到实体类的结果包含 joinTable 的 id 和 table 的其余列。如果我重新排序表,结果是相似的,我有来自表的 ID 和来自 joinTable 的其余列。

【问题讨论】:

你不用jOOQ生成元模型吗?` 【参考方案1】:

元模型是使用 jooq-codegen-maven 插件生成的。 有趣的是,我发现使用:

dsl.select(table.fields())...

解决问题。我希望这种行为是默认的,但事实并非如此。

【讨论】:

您为什么希望这是默认行为?你加入了一个表,为什么默认不投影它的列? 因为我最后执行了.fetchInto(entityClass),所以我希望jooq会提取属于entityClass的连接列来构造实体类对象。 我明白了,但是在很多你不想要这种行为的情况下,这会非常令人困惑,包括即使你的查询中有 DISTINCT 或联合等...... SQL 投影(SELECT 子句)和映射(fetch 方法)相互独立。 谢谢@LukasEder,我现在明白了。

以上是关于JOOQ 连接两个具有相同列名的表的主要内容,如果未能解决你的问题,请参考以下文章

具有相同列名的 MySQL 连接表

内连接2个具有相同列名的表

组合和连接两个不同编号的表。列和相同的列名

连接来自两个不同表的两列

连接多个具有相同前缀名称的表

java - 如何在java中组合(连接)具有相同列名的两个数据框