链接生成的 Jooq 类时如何解决不明确的匹配

2023-12-20

我已经在 J​​PA 中定义了我的模型,并正在为我的应用程序编写一些查询,并且我正在使用 JOOQ 生成的类将所有表连接在一起,以检查请求的资源是否确实属于请求用户。

但是,当我这样做时,我收到以下警告:

Ambiguous match found for ID. Both "alias_4548634"."ID" and "alias_47496750"."ID" match.

java.sql.SQLWarning: null                                                                                                                                       
        at org.jooq.impl.Fields.field(Fields.java:132) ~[jooq-3.11.10.jar:?]
... etc

这是我的代码

db.select(countField)
  .from(thing)
  .where(JThing.THING.thingBucket().bucket().organization().customer().ID.in(idList))
  .orderBy(countField)

这是它生成的 SQL

SELECT 
  count(PUBLIC.THING.ID) AS count
FROM (
  PUBLIC.THING
    LEFT OUTER JOIN (
      PUBLIC.THING_BUCKET AS alias_72652126
        LEFT OUTER JOIN (
          PUBLIC.BUCKET AS alias_4548634
            LEFT OUTER JOIN (
              PUBLIC.ORGANISATION AS alias_43016761
                LEFT OUTER JOIN PUBLIC.CUSTOMER AS alias_47496750
                ON alias_43016761.CUSTOMER_ID = alias_47496750.ID
            )
            ON alias_4548634.ORGANISATION_ID = alias_43016761.ID
        )
        ON alias_72652126.ID = alias_4548634.ID
    )
    ON PUBLIC.THING.THING_BUCKET_ID = alias_72652126.ID
  )
WHERE alias_47496750.ID IN (81353)
ORDER BY count

鉴于 JOOQ 正在生成 SQL,我希望它能够理解它而不会抛出错误。我缺少什么?我该如何配置/查询/执行其他操作来解决 SQLWarning?

UPDATE

经过一番尝试后,我已经确定了问题的根源。

THING_BUCKET 是 BUCKET 的子类型,因此 THING_BUCKET.ID = BUCKET.ID

如果我重写查询,我会得到相同的结果,但没有错误

SELECT 
  count(PUBLIC.THING.ID) AS count
FROM (
  PUBLIC.THING
        LEFT OUTER JOIN (
          PUBLIC.BUCKET AS alias_4548634
            LEFT OUTER JOIN (
              PUBLIC.ORGANISATION AS alias_43016761
                LEFT OUTER JOIN PUBLIC.CUSTOMER AS alias_47496750
                ON alias_43016761.CUSTOMER_ID = alias_47496750.ID
            )
            ON alias_4548634.ORGANISATION_ID = alias_43016761.ID
        )
    ON PUBLIC.THING.BUCKET_ID = alias_4548634.ID
  )
WHERE alias_47496750.ID IN (81353)
ORDER BY count

所以我想做的就是去

db.select(countField)
  .from(thing)
  .where(JThing.THING.bucket().organization().customer().ID.in(idList))
  .orderBy(countField)

并将我的东西直接加入到 BUCKET 而不是 THING_BUCKET,但我不知道如何使用生成的类来完成此操作。


这看起来像是 jOOQ 3.14 中修复的一个错误,请参阅#8659 https://github.com/jOOQ/jOOQ/issues/8659, #10603 https://github.com/jOOQ/jOOQ/issues/10603

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

链接生成的 Jooq 类时如何解决不明确的匹配 的相关文章

随机推荐

  • 在 Eclipse Neon 上安装 WindowBuilder

    我正在使用 Eclipse Neon 它是从 Eclipse Installer 安装的 问题是当我想使用 Swing 时 我没有找到它 当我尝试使用安装时this https stackoverflow com questions 108
  • Razor 复选框未绑定到模型

    我是 ASP NET MVC 新手 我的表单中有一个复选框 Html CheckBox Don t show my number Model IsPhonePublic 但无论我是否选中该框Model IsPhonePublic提交表单时始
  • 如何在 Android 中使用拖放交换两个图像视图?

    我一直在尝试在 Android 中实现一个非常简单的拖放操作 其中拖动的项目与其放置的项目交换位置 我已经成功实现了 onLongClick 和 onDrag 侦听器 当我拖放一个项目时 它会替换它所放置的项目 但我不知道如何使替换的项目取
  • CoffeeScript 中的动态类生成

    在 CoffeeScript 中动态创建类以便稍后实例化它们的对象的最佳方法是什么 我已经找到了方法 但我不确定是否有更好 或更简单 的方法来实现它 请让我知道您对我的代码的想法 让我们从简单的非动态类开始 class Animal con
  • Kotlin - 多平台功能

    我目前正在使用 Kotlin 多平台功能 但遇到了一个小问题 当我在 Intellij 中启动 gradle 多平台项目并使用关键字 实际 和 预期 时 它们会用红色下划线显示 并显示消息 多平台项目 功能是实验性的 应明确启用 如何显式启
  • 如何在 C++ 中通过引用传递“文字”整数

    为了避免调用函数 例如 fillRect 时按值复制的低效率 我想通过引用传递参数 如果我提供参数作为声明的局部变量 它就可以正常工作 但是 如果我提供任何 文字 整数 我会收到编译错误 没有匹配的函数 void fillRect int
  • 将图像和名称添加到现有 WL spl 令牌

    我一直用的是Solana labs token listGithub 上的存储库 https github com solana labs token list https github com solana labs token list
  • 查找字符串中不重复的字符

    我必须在 JavaScript 中创建一个函数来删除字符串中的所有重复字母 到目前为止 我已经能够做到这一点 如果我有 anaconda 这个词 它会在应该显示 cod 时向我显示结果 anaconda 这是我的代码 function fi
  • 对同一对象的链接操作和求值顺序

    考虑一个class MyClass with 成员函数myClass myFunction1 int 这修改了 对象并返回 this 成员函数int myFunction2 const那不 修改对象 C 11 14 标准是否保证 mycla
  • 如何更新父子之间的数据

    我能够通过模板绑定 在 ngInit 上 将数据从父级传递到子级 但是当它在父组件更新时我如何共享相同的数据 是否可以在不涉及服务的情况下共享 从父组件到子组件 更新的数据 我尝试了模板
  • 是否可以在 multi_match 查询中仅对一个字段使用模糊性?

    我在 Elasticsearch 中使用以下 multi match 查询 我想知道是否可以仅对 friend name 字段 使用模糊性 我尝试过不同的方法 但似乎不起作用 我还想知道是否可以使用分析器来获得与模糊性类似的结果 query
  • 根据回归系数在散点图上绘制回归线

    我正在尝试使用以下方法绘制回归线 https observablehq com harrystevens introducing d3 regression linear https observablehq com harrysteven
  • 如何在wpf C#中从数据表导出到excel文件

    我有一个数据表 希望将其导出到 Excel 文件 它是一个 wpf 应用程序 我找到的所有解决方案都是针对 Web 应用程序 asp net 请帮助 只是为了让所有人更容易看到 Microsoft Office Interop Excel
  • 如何删除Android TextView上的第一个字符缩进

    我在 Android 上使用 TextView 在屏幕上显示多行文本 如下所示 aaaaaaaaaaaaaaaaaaaaaa n bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb n cccccccccccccccc
  • Canvas.drawText() 更改不同尺寸图像的文本大小

    我正在绘制文本Bitmap 图像转换为位图 使用Canvas API drawText 方法 我能够在上面绘制文字Bitmap但我正在努力解决以下错误 如果从设备相机中单击图像 则在其上绘制的文本具有正确的大小 但是 如果从图库中随机选择一
  • Aptana 间歇性无法关闭输出流

    希望有人能帮忙解决这个问题 因为它让我发疯 我在 OS X Lion 上使用 Aptana 3 1 但与之前版本的 Aptana 和 Snow Leopard 遇到了同样的问题 我设置了多个 ftp 连接 但在尝试上传文件时遇到间歇性问题
  • C++:函数/方法声明中与号“&”和星号“*”之间的区别?

    它们之间是否存在某种微妙的区别 void a1 float b b 1 a1 b and void a1 float b b 1 a1 b 它们都执行相同的操作 或者从 main 看来是这样 但第一个显然更短 但是我看到的大多数代码都使用第
  • PHP 函数 session_module_name 到底有什么用?

    PHP Session 相关函数有这个 会话模块名称 http www php net manual en function session module name php 文档只说 session module name 获取和 或设置当
  • 如何以编程方式安装 VisualStudio 扩展?

    如何获取已安装的 VisualStudio 扩展的列表 不知何故通过DTE 只要名字就足够公平了 这有帮助吗 System IServiceProvider serviceProvider package as System IServic
  • 链接生成的 Jooq 类时如何解决不明确的匹配

    我已经在 J PA 中定义了我的模型 并正在为我的应用程序编写一些查询 并且我正在使用 JOOQ 生成的类将所有表连接在一起 以检查请求的资源是否确实属于请求用户 但是 当我这样做时 我收到以下警告 Ambiguous match foun