首页 > 解决方案 > jOOQ 中的隐式连接和 N:N 表

问题描述

在当前的 jOOQ 版本中,有一个隐式连接表的功能。

它允许使用在表上定义的外键约束“导航”。

它也适用于n:n桌子吗?例如,如果我有DOCUMENT, 和CLIENT, 和n:n它们之间的表CLIENT_DOCUMENT,我将如何翻译以下查询以使用新语法?

  db.select(*DOCUMENT.fields())
            .from(DOCUMENT)
            .join(CLIENT_DOCUMENT).onKey()
            .join(CLIENT).onKey()
            .where(CLIENT.CLIENT_NAME.eq(name))
            .fetchInto(Document::class.java)

谢谢。

标签: sqljooq

解决方案


从jOOQ 3.13 开始,隐式连接功能仅适用于一对一关系,而不适用于多对关系。未来版本有多种计划改进:#7536

但是,m:n关系可以看作是从关系表开始的二对一关系。你可以写:

db.select(CLIENT_DOCUMENT.document().fields())
  .from(CLIENT_DOCUMENT)
  .where(CLIENT_DOCUMENT.client().CLIENT_NAME.eq(name))
  .fetchInto(Document::class.java)

推荐阅读