【发布时间】:2016-05-07 14:16:34
【问题描述】:
最近,我开始在我的项目中使用 JOOQ(版本 3.7.1), 但是,我已经遇到了一个问题——对我来说——似乎是 JOOQ 实现中的一个缺点。
在对一组表执行 JOIN 时会出现这个缺点, 其中一个特定的表出现不止一次,例如连接 一个表 PERSON 本身(即查找父母的数据)..
JOOQ 生成的 PERSON 类可以多次使用,使用 Table.as(String name) 方法,然而,getReferences() 方法返回的外键只是返回对静态 Keys 类的引用列表。 这样,将 Person 与 Address 表连接起来,JOOQ 没有办法 来确定是否应该加入主 Person 或父级。
因此,在我看来,外键应始终与对包含外键(引用者)和 JOOQ 的特定表的引用结合起来,例如在 SelectQuery(SelectQueryImpl 类)中不提供 那个安全。 "addJoinOnKey" 方法中的 TableLike 参数是指被引用的表,而不是引用者。
我错了吗?还是 JOOQ 真的无法正确处理查询 在哪里使用特定表不止一次? 如果是的话,为什么这不是固定的?
最好的问候,期待您的 cmets。
【问题讨论】:
-
该区域存在设计限制,并且最近进行了修复:github.com/jOOQ/jOOQ/issues/4637、github.com/jOOQ/jOOQ/issues/2870。显然,仍然存在未解决的问题。您介意发布一些有助于重现您遇到的问题的代码吗?从目前的问题来看,判断是有缺点,有bug,还是只是误会有点棘手……
-
我不介意实施一些我认为会出现缺点的简单示例,也不介意提出一些设计解决方案。我只是希望我错过了一种指定外键的方法,该方法不同于引用 Keys 类中生成的某些外键。如果该替代方案不存在,则在例如 SelectQuery 类中已经存在逻辑缺陷(在引荐来源表出现多次的情况下),因为它无法指定我们指的是哪个(多个)外键.当我找到它们时,我会发布简单的好例子。