jOOQ:如何在跨多个表连接时解决“为 <column> 找到的模糊匹配”?

jOOQ: How to resolve `Ambiguous match found for <column>` when joining across multiple tables?

以下 jOOQ 查询在我的日志中发出 SQL 警告:Fields Ambiguous match found for id

db.select(FORWARDED_MESSAGE.SES_MESSAGE_ID).
  from(FORWARDED_MESSAGE).
  where(
    FORWARDED_MESSAGE.FORWARDED.lt( DSL.currentTimestamp().subtract(
      FORWARDED_MESSAGE.mailMapping().mailKeyword().mailDomain().account().
        MESSAGE_RETENTION_DAYS ))).
  fetch(FORWARDED_MESSAGE.SES_MESSAGE_ID);

生成的 SQL 似乎是正确的,但我不希望警告污染我的日志(我想知道 jOOQ 是否警告我一些我需要注意的重要事情) .

关于模式表的一些上下文:

我尝试了以下方法,但没有显示 Key ambiguous between tables:

db.select(FORWARDED_MESSAGE.SES_MESSAGE_ID).
  from(FORWARDED_MESSAGE).
    join(MAIL_MAPPING).onKey().
    join(MAIL_KEYWORD).onKey().
    join(MAIL_DOMAIN).onKey().
    join(ACCOUNT).onKey().
  where(
    FORWARDED_MESSAGE.FORWARDED.lt(
      DSL.currentTimestamp().subtract(ACCOUNT.MESSAGE_RETENTION_DAYS) )).
  fetch(FORWARDED_MESSAGE.SES_MESSAGE_ID);

jOOQ版本为3.13.4,数据库为postgres,使用pgjdbc 42.2.14.

问题:
如何解决 Fields Ambiguous match found 警告?

注意:这不是 的骗局,因为那是关于子类歧义的问题 - 这个问题是关于连接的简单链接(跨具有重复 PK 列的表)。

我能够通过 re-writing 对 join().onKey() 样式的查询使警告消失,但明确指定了连接外键。

有点冗长,但似乎可行:

db.select(FORWARDED_MESSAGE.SES_MESSAGE_ID).
  from(FORWARDED_MESSAGE).
    join(MAIL_MAPPING).
      onKey(Keys.FORWARDED_MESSAGE__FORWARDED_MESSAGE_MAIL_MAPPING_ID_FKEY).
    join(MAIL_KEYWORD).onKey(Keys.MAIL_MAPPING__MAIL_MAPPING_MAIL_KEYWORD_ID_FKEY).
    join(MAIL_DOMAIN).onKey(Keys.MAIL_KEYWORD__MAIL_KEYWORD_DOMAIN_FKEY).
    join(ACCOUNT).onKey(Keys.MAIL_DOMAIN__MAIL_DOMAIN_MAIL_DOMAIN_ACCOUNT_ID_FKEY).
  where(
    FORWARDED_MESSAGE.FORWARDED.lt(
      DSL.currentTimestamp().subtract(ACCOUNT.MESSAGE_RETENTION_DAYS) )).
  fetch(FORWARDED_MESSAGE.SES_MESSAGE_ID);

不确定为什么这与 FORWARDED_MESSAGE.mailMapping()...account() 风格有很大不同。但它有效并且生成的 SQL 更干净。