Java 在jooQ中具有左连接的自定义POJO

Java 在jooQ中具有左连接的自定义POJO,java,join,left-join,jooq,Java,Join,Left Join,Jooq,我正在进行表a和表B的左连接,并尝试将结果获取到自定义POJO中,该POJO包含表a和表B中的字段,如下所示: List<MyCustomPojo> res = create.select() .from(TABLE_A) .leftJoin(TABLE_B) .on(TABLE_A.MY_CODE.eq(TABLE_B.MY_CODE

我正在进行表a和表B的左连接,并尝试将结果获取到自定义POJO中,该POJO包含表a和表B中的字段,如下所示:

List<MyCustomPojo> res = create.select()
                         .from(TABLE_A)
                         .leftJoin(TABLE_B)
                         .on(TABLE_A.MY_CODE.eq(TABLE_B.MY_CODE))
                         .fetchInto(MyCustomPojo.class);
List res=create.select()
.来自(表A)
.leftJoin(表B)
.on(表A.我的代码.eq(表B.我的代码))
.fetchInto(MyCustomPojo.class);
它适用于除myCode字段之外的所有字段,myCode字段是连接这两个表的字段。对我来说,myCode的值是从正确的表B中获取的,表A中的所有记录在表B中都没有相应的条目。我想知道jooQ如何决定映射到POJO的字段,以及是否在任何地方记录了这种行为

我的目标是将表A和表B中的所有字段提取到自定义POJO中,以便从左表中提取myCode。如果您能提供正确的实现方法,我将不胜感激。

中指定了(以及大多数其他
到(类)
方法)的默认行为。它可以在您的
配置中被全局覆盖

在您的特定情况下,
DefaultRecordMapper
将按字段顺序映射记录中的所有值。如果有一列出现两次,它将被映射两次,这意味着第二个值将保留在结果对象中。有两个简单的解决方法:

不要选择“错误”的myCode。这确实是最可靠的解决方案 最后是
右连接的一个用例(
:)

注意,这是唯一的解决方案,可以防止“意外”共享相同名称的其他列出现错误值

再次添加“正确”myCode字段。 另一个黑客,但它可以解决您遇到的问题:

List<MyCustomPojo> res = create
    .select(TABLE_A.fields())
    .select(TABLE_B.fields())
    .select(TABLE_A.MY_CODE)
    .from(TABLE_A)
    .leftJoin(TABLE_B)
    .on(TABLE_A.MY_CODE.eq(TABLE_B.MY_CODE))
    .fetchInto(MyCustomPojo.class);
List res=create
.select(表字段())
.选择(表字段()
.选择(表A.我的代码)
.来自(表A)
.leftJoin(表B)
.on(表A.我的代码.eq(表B.我的代码))
.fetchInto(MyCustomPojo.class);

谢谢卢卡斯!所有这些选项对我都有效,我将继续第三个选项。
List<MyCustomPojo> res = create
    .select()
    .from(TABLE_B)
    .rightJoin(TABLE_A)
    .on(TABLE_A.MY_CODE.eq(TABLE_B.MY_CODE))
    .fetchInto(MyCustomPojo.class);
List<MyCustomPojo> res = create
    .select(TABLE_A.fields())
    .select(TABLE_B.fields())
    .select(TABLE_A.MY_CODE)
    .from(TABLE_A)
    .leftJoin(TABLE_B)
    .on(TABLE_A.MY_CODE.eq(TABLE_B.MY_CODE))
    .fetchInto(MyCustomPojo.class);