我有两张桌子: 房地产: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 。
从 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 了解详细信息。