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

时间:2019-03-29 13:45:56

标签: java join jooq

我有一张桌子.page-header.has-featured-image{ padding: 2rem 3.75rem; } 和另外一张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中的值而不是{{1} },当我尝试将结果X映射到Y时。我知道有into,但是我只有YRecord可以使用。

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

我刚刚弄清楚了。 jOOQ代码生成器创建一个名为Keys的对象,其中包含项目中的所有键。这样您就可以使用

xRecord.fetchParent(X_TO_Y_ID_FKEY)

,它将为您获取父级(也适用于子级)。 有一个警告。需要Record attachDSLContext才能使用这种方式。