JOOQ - 将结果转换为Pojo

asc*_*ott 2 java sql jooq

我已经看到JOOQ可以在我们使用.selectFrom(TABLE)或 时自动返回POJO.fetchInto(POJO.class);

但是有可能将复杂查询的结果转换为多个POJO吗?

示例:

此查询将所有列的数组返回到表Support和Box中.可以将它们转换为Support和Box Pojo吗?

Result<Record> results = query.select()
                         .from(BOX)
                         .join(SUPPORT)
                         .on(SUPPORT.ID.equal(BOX.SUPPORT_ID))
                         .where(SUPPORT.ID.equal("XXXX"))
                         .orderBy(BOX.ID)
                         .fetch();
Run Code Online (Sandbox Code Playgroud)

我测试了这个方法.intoGroups(SUPPORT.ID, Box.class),它运行正常.但我没有支持对象.

Ant*_*sev 5

实例化为SelectSeekStep1

使用别名更方便:

Box b = BOX.as("b");
Support s = SUPPORT.as("s");

SelectSeekStep1<Integer, Integer> sql = query.select(b.ID, s.ID /* other columns */)
     .from(b)
     .join(s)
        .on(s.ID.eq(b.SUPPORT_ID))
     .where(s.ID.eq("XXXX"))
     .orderBy(b.ID)
;
Run Code Online (Sandbox Code Playgroud)

然后只需获取您需要的内容:

List<BoxRecord> boxes = sql.fetchInto(BOX); 
SupportRecord support = sql.limit(1).fetchOneInto(SUPPORT);
Run Code Online (Sandbox Code Playgroud)

  • @ascott:[这是一个已知的问题](https://github.com/jOOQ/jOOQ/issues/3634).目前,你必须删除别名,即调用`as("b")`和`as("s")`. (2认同)