【问题标题】:JOOQ Foreign Key Conceptual Shortcoming?JOOQ外键概念缺陷?
【发布时间】: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 类中已经存在逻辑缺陷(在引荐来源表出现多次的情况下),因为它无法指定我们指的是哪个(多个)外键.当我找到它们时,我会发布简单的好例子。

标签: java jooq


【解决方案1】:

这可能确实是一个缺点,具体取决于您如何看待 jOOQ API。路线图上有一个问题,讨论了别名表返回约束信息的别名版本的可能性: https://github.com/jOOQ/jOOQ/issues/5050

即

// "MY_TABLE"."ID"
MY_TABLE.getPrimaryKey();

// "a"."ID"
MY_TABLE.as("a").getPrimaryKey();

为了从表中获取正确的列集,您可以随时调用:

MY_TABLE.as("a").fields(MY_TABLE.getPrimaryKey().getFieldsArray());

目前的问题很难说是否还有额外的错误(除了上述潜在的缺点)。一旦问题指向具体问题,我将更新此答案。

【讨论】:

  • 我非常同意问题 5050。我也不清楚是否还有其他错误,但话说回来,确切的规范是什么?不幸的是,这个问题是 - 对我来说 - 坚持实施 SQL 的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
相关资源
最近更新 更多