postgresql 如何在jooq中访问外键表?

w3nuxt5m  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(1)|浏览(126)

我有两个表:真实的_estate:id - PK、external_id_mdm
key_transfer:id -主键,真实的_estate_id - FK(引用真实的_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);

字符串
这给了我一个错误:已通过returning()子句请求列“alias_30603682”.“external_id_mdm”,该子句不存在于表“key_transfer”中。
该消息说我正在访问key_transfer表,但实际上我正在通过FK访问真实的_estate。
在过去的几次我要求这样的请求在选择查询,它的工作.这一次是怎么回事?
我希望通过FK获取字符串类型的字段external_id_mdm。

wkyowqbh

wkyowqbh1#

从jOOQ 3.19开始,还不支持来自DML RETURNING子句的隐式联接,请参阅:

你必须使用UPDATE .. FROM显式地连接REAL_ESTATE表,如下所示:

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);

字符串
请注意,为了获取仅由EXTERNAL_ID_MDM列组成的Record1<String>,您必须使用returningResult(),而不是returning()。有关详细信息,请参阅相关的Javadoc。

相关问题