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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将2条记录(多对一)的Result对象映射到jOOQ中各自的记录对象?相关的知识,希望对你有一定的参考价值。

我有一张桌子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可以使用。

答案

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

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);
}
另一答案

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

xRecord.fetchParent(X_TO_Y_ID_FKEY)

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

以上是关于如何将2条记录(多对一)的Result对象映射到jOOQ中各自的记录对象?的主要内容,如果未能解决你的问题,请参考以下文章

mybatis 一对多和多对一

resultMap自定义映射(多对一)

resultMap自定义映射(多对一)

mybatis映射 一对一,一对多,多对多高级映射

如何在 JpaRepository 中为多对一映射实体编写查询

数据库之 表与表之间的关系