Return 加入多个 table 并选择相同字段时的自定义 JOOQ 记录

Return custom JOOQ record when joining multiple table and selecting omonimous fields

我正在尝试制作一个小方法来重新整理与检索某些数据相关的代码以使其易于使用我需要使生成的 table 记录可访问,所以我尝试制作一个 CustomTable使用 CustomRecord。

为了更清楚地说明我正在尝试做什么,我写下了一些我尝试过的示例:

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();}

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

有办法让我 return 我的 customTable 中的数据吗?

我假设您希望有一个对象的行为与任何其他生成的对象一样 table,但它与动态构造的 jOOQ 查询相对应。如果您愿意,可以在 jOOQ 中表达观点。

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

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

目前,您必须 return 一个缺乏类型安全的 Table<?> 实例,或者直接在 SQL 中实现您的视图或 table 赋值函数,并且让 jOOQ 代码生成器接收它。