Java 在jooQ中具有左连接的自定义POJO
我正在进行表a和表B的左连接,并尝试将结果获取到自定义POJO中,该POJO包含表a和表B中的字段,如下所示: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
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);