JOOQ - 将结果转换为 Pojo

5

我发现JOOQ可以在使用.selectFrom(TABLE)或者.fetchInto(POJO.class);时自动返回一个POJO。

但是,是否有可能将复杂查询的结果转换为多个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();

我已经测试了方法.intoGroups(SUPPORT.ID, Box.class),它可以很好地运行。但是我没有这个支持对象。

2个回答

8

实例化为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)
;

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

List<BoxRecord> boxes = sql.fetchInto(BOX); 
SupportRecord support = sql.limit(1).fetchOneInto(SUPPORT);

感谢您的回答。我已经测试过了,但没有得到预期的结果。对于箱子(box),它是可以的,但是当我执行SupportRecord support = sql.limit(1).fetchOneInto(SUPPORT);时,支持记录(SupportRecord)中的ID字段却变成了箱子的ID,这是因为它们有相同的字段名吗? - ascott
2
@ascott: 这是一个已知的问题。目前,您需要删除别名,即删除对as("b")as("s")的调用。 - Lukas Eder

2

未来的读者,如果你想通过插入方法实现相同的行为,你应该使用:

insertInto(BOX)
    .set(BOX.COLUMN1, UInteger.valueOf(1))
    .set(BOX.COLUMN2, "test")
    .returning()
    .fetchOne()
    .into(<POJO_class>.class);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接