如何访问jooq中的外键表?

问题描述 投票:0回答:1

我有两张桌子: 房地产:id - PK,external_id_mdm

key_transfer:id - PK,real_estate_id - FK(参考real_estate(id))

在我的 jooq 更新查询中,我想更新并获取返回类型:


    dsl.update(keyTransfer)
                    .set(keyTransfer.SEND_OGO, ogo)
                    .where(keyTransfer.ID.eq(keyTransferId))
                    .returning(keyTransfer.realEstate().EXTERNAL_ID_MDM)
                    .fetchOneInto(String.class);

这给了我错误: 列“alias_30603682”.“external_id_mdm”已通过returning()子句请求,该列不存在于表“key_transfer”中。

该消息显示类似我正在访问 key_transfer 表,但实际上我正在通过 FK 访问 real_estate。

过去我很少在选择查询中请求此类请求,并且它有效。这次怎么了?

我期望通过 FK 作为 String 类型获取字段 external_id_mdm 。

java postgresql foreign-keys jooq
1个回答
0
投票

从 jOOQ 3.19 开始,尚不支持 DML

RETURNING
子句的隐式连接,请参阅:

您必须使用

REAL_ESTATE
 显式加入 
UPDATE .. FROM
表,如下所示:

dsl.update(KEY_TRANSFER)
   .set(KEY_TRANSFER.SEND_OGO, ogo)
   .from(REAL_ESTATE)
   .where(KEY_TRANSFER.ID.eq(keyTransferId))
   .and(KEY_TRANSFER.REAL_ESTATE_ID.eq(REAL_ESTATE.ID))
   .returningResult(REAL_ESTATE.EXTERNAL_ID_MDM)
   .fetchOneInto(String.class);

请注意,为了获取仅包含

Record1<String>
列的
EXTERNAL_ID_MDM
,您必须使用
returningResult()
,而不是
returning()
请参阅相关 Javadoc 了解详细信息

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