找出JOOQ函数所依赖的表

时间:2015-03-17 15:08:09

标签: java sql jooq

我只是在select语句包含要求这些表成为查询一部分的字段时才尝试动态添加一些连接到我的JOOQ查询。所以我需要知道给定Field所依赖的表。

通过TableField TableField.getTable()很容易Function

Function.getArguments()来说也很容易 - 使用TableField我可以递归地遍历函数树,直到我到达所有Function叶节点。

然而,遗憾的是,{{1}}类是包私有。

我也没有在JOOQ中看到任何可以解决这个问题的静态工具。

不知道是否有办法在生成的sql或偷偷摸摸的反射中使用脏正则表达式。

1 个答案:

答案 0 :(得分:1)

"官方"这种SQL转换的方法是使用VisitListener SPI并挂钩查询呈现生命周期,从SELECT子句收集所有不同的表,并将它们添加到FROM条款通过最合适的连接。

这是访问内部Function类型参数的唯一方法,而不是通过正则表达式或反射来共同破解内容。

话虽如此:警惕这样做

你需要照顾这些事情(这可能是不可能的):

  • 当您自行加入桌子时会发生什么?
  • 您如何知道内部或外部是否加入两个表?
  • 您如何知道是否可以重复使用FROM子句中已有的表格,或者您是否必须再次加入该表格?
  • 你怎么知道"最佳"如果有几种可能的方法通过外键加入它们,那么从表A到表B的路径是什么?