如何将2条记录(多对一)的Result对象映射到jOOQ中各自的记录对象?

问题描述 投票:2回答:2

我有一张桌子X和另一张Y。我想从X加载一条记录,该记录有Y的外键,所以我执行左连接:

X x = dslContext.select()
                .from(Tables.X)
                .leftJoin(Tables.Y)
                .on(Tables.X.SOME_ID.eq(Tables.Y.ID))
                .where(Tables.X.IS.eq(id))
                .fetchOptionalInto(XRecord.class)

这是完全没问题,但我有点困惑,我怎么从这提取Y?我尝试使用into,但问题是,如果在Y中也存在X中的列,当我尝试将结果X映射到Y时,我会看到来自into而不是YRecord的值。我知道有fetchGroups但我只有一个XRecord可以使用。

java join jooq
2个回答
2
投票

您可以从通用记录类型映射记录,如下所示:

Record r = dslContext
                .select()
                .from(Tables.X)
                .leftJoin(Tables.Y)
                .on(Tables.X.SOME_ID.eq(Tables.Y.ID))
                .where(Tables.X.IS.eq(id))
                .fetchOne();

if (r != null) {
    XRecord x = r.into(Tables.X);
    YRecord y = r.into(Tables.Y);
}

0
投票

我刚想通了。 jOOQ代码生成器创建一个名为Keys的对象,其中包含项目中的所有键。有了它,你可以使用

xRecord.fetchParent(X_TO_Y_ID_FKEY)

并且它将为您获取父级(也适用于子级)。但有一点需要注意。 Record需要与attach进行DSLContexted才能以这种方式使用它。

© www.soinside.com 2019 - 2024. All rights reserved.