代码之家  ›  专栏  ›  技术社区  ›  blubb

如何总是为jooq 3.11的隐式连接特性生成“table”构造函数?

  •  1
  • blubb  · 技术社区  · 8 年前

    jooq 3.11引入了一个很棒的特性,叫做 implicit joins .

    不幸的是,这个新特性给我们半生不熟的应用程序模块化带来了麻烦。

    症状

    看着 JOOQ generator source code ,我发现生成的类的以下构造函数 FileStorage (A) Table 子类)仅在jooq生成器找到外键引用时生成 FILE_STORAGE :

    public <O extends Record> FileStorage(Table<O> child, ForeignKey<O, FileStorageRecord> key) {
        super(child, key, FILE_STORAGE);
    }
    

    这会导致在我们的构建中出现编译错误,从而分别为每个应用程序模块生成jooq模型:

    我们为每个应用程序模块使用一个模式(例如 billing )还有一个特殊的模式 shared 从每个应用程序模块都可以看到。jooq元模型 共享 是在与其他代码完全隔离的情况下生成的,因此在 共享 ,来自的外键 INVOICE (模块 演员表 文件存储 (模块 共享 )对jooq生成器不可见。因此,上面的构造函数在 文件存储 侧面但不在 发票 jooq模型的一方,我们最终在 Invoice 演员表 的乔克模型。

    问题

    没有复制jooq模型 共享 在10+应用程序模块中,是否有解决此问题的方法?为什么这些构造函数不是无条件生成的?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Lukas Eder    8 年前

    当前实现(jooq 3.10.0)的原因是为了防止在大型模式中只有很少外键约束的情况下生成“过多”的代码。也就是说,有了这个限制,就没什么好处了。

    在您的安装程序中生成的代码中存在编译错误,这一事实暗示此限制实际上是错误的。应再次从JOOQ 3.12.0和3.11.1中删除:

    https://github.com/jOOQ/jOOQ/issues/7573

    解决方法可以是生成所有模式并使用后处理器删除不需要的代码。