我有一张桌子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
进行DSLContext
ed才能以这种方式使用它。