gpt4 book ai didi

java - JOOQ:如何将记录映射到别名表(来自嵌套查询)

转载 作者:太空宇宙 更新时间:2023-11-04 09:04:01 25 4
gpt4 key购买 nike

我有一个带有联接的嵌套查询,我正在尝试将结果映射回表。查询类似于:

var nested = context.select(BUSINESS.fields()).from(BUSINESS).limit(size).offset(size * page);
var idField = nested.field(BUSINESS.UIDBUSINESSID);

var result = context.select(nested.fields()).select(BUSINESSALIAS.fields())
.select(BUSINESSCONTACT.fields()).select(BUSINESSIDENTIFIER.fields())
.select(SITEADDRESS.fields()).select(WEBSITE.fields())
.from(nested)
.leftJoin(BUSINESSALIAS)
.on(idField.eq(BUSINESSALIAS.BUSINESSID))
.leftJoin(BUSINESSCONTACT)
.on(idField.eq(BUSINESSCONTACT.BUSINESSID))
.leftJoin(BUSINESSIDENTIFIER)
.on(idField.eq(BUSINESSIDENTIFIER.BUSINESSID))
.leftJoin(SITEADDRESS)
.on(idField.eq(SITEADDRESS.BUSINESSID))
.leftJoin(WEBSITE)
.on(idField.eq(WEBSITE.BUSINESSID))
.fetch();

像这样 record.into(BUSINESS).into(Business.class) 将结果映射回 BUSINESS 会导致大量异常,因为某些字段存在不明确的匹配。实际错误是:

发现 BusinessId 不明确匹配。 “alias_34775958”.“BusinessId”和“MCDH”.“dbo”.“SiteAddress”.“BusinessId”均匹配

在将记录映射到表中时,如何告诉 JOOQ BUSINESS 表限定符应该是别名 alias_34775958

最佳答案

您调用record.into(BUSINESS)导致这种歧义,因为您的查询实际上没有 BUSINESS 中的任何列表(尽管您在派生表中使用此表)。

尝试使用record.into(nested.fields())相反,它将生成精确的字段引用,包括生成的别名。或者,您也可以使用具有显式别名的表:

var nested = table(select(BUSINESS.fields())
.from(BUSINESS)
.limit(size)
.offset(size * page)).as("b");

现在,nested类型为Table<?>而不是Select<?> ,你可以直接在你的 record.into(nested) 中使用它打电话。

关于java - JOOQ:如何将记录映射到别名表(来自嵌套查询),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60442735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com