连接多个表并选择共同字段时返回自定义 JOOQ 记录

Posted

技术标签:

【中文标题】连接多个表并选择共同字段时返回自定义 JOOQ 记录【英文标题】:Return custom JOOQ record when joining multiple table and selecting omonimous fields 【发布时间】:2021-12-29 07:30:52 【问题描述】:

我正在尝试制作一个小方法来整理与检索一些数据相关的代码以使其易于使用我需要使结果表记录可访问,因此我尝试使用 CustomRecord 制作一个 CustomTable。

为了更清楚我想要做什么,我写下我尝试过的一些示例:

public MyCustomTable getTableReusable(final DSLContext ctx,
    final Profile profile, final LocalDate date) 
    final Table<Table1Record> tab1 = Table1.TABLE1.as("a");
    final Table<Table2Record> tab2 = tab2.TABLE2.as("b");
    
    return ctx.select(table1.field(tab1.ID).as(MyCustomTable.TAB1_ID), 
            tab1.field(Table1.A_FIELD).as(MyCustomTable.TAB1_A_FIELD), 
            tab2.field(Table2.ID).as(MyCustomTable.TAB2_ID), 
            tab2.field(Table2.B_FIELD).as(MyCustomTable.TAB2_B_FIELD)) 
            .from(tab1) 
            .leftJoin(tab2) 
            .on(tab1.field(Table1.ID).eq(tab2.field(Table2.TAB1_FK))) //
            .asTable();

当时不可能将此表转换为自定义表,所有字段都在 select 方法中设置。 在自定义表中,我什至制作了所有记录的 CustomRecord。

是否有办法让我返回 customTable 中的数据?

【问题讨论】:

【参考方案1】:

我假设您有一个对象,该对象的行为类似于任何其他生成的表,但它对应于动态构造的 jOOQ 查询。 jOOQ 中表达的观点,如果你喜欢的话。

目前没有简单的方法可以实现这一目标。待处理的功能请求包括:

#1969 添加对 jOOQ 中表达的视图的支持 #11054 为合成视图添加代码生成器支持

现在,您必须返回一个缺乏类型安全性的 Table&lt;?&gt; 实例,或者直接在 SQL 中实现您的视图或表值函数并让 jOOQ 代码生成器来处理它。

【讨论】:

以上是关于连接多个表并选择共同字段时返回自定义 JOOQ 记录的主要内容,如果未能解决你的问题,请参考以下文章

JOOQ - 如何将 array_agg 与自定义类型字段一起使用

用于从表中选择具有最新时间戳的行的 JOOQ 代码

如何连接多个表,包括查找表并按行返回数据

连接两个表并从一列返回多个匹配项的 SQL 查询?

jOOQ - 支持 UPDATE ... SET ... 任意程度的查询

jOOQ 不使用自定义数据绑定