Jooq 3.9没有将MySQL列链接到枚举

时间:2017-06-07 10:41:46

标签: java mysql enums jooq

我正在将jooq从版本 3.4.1 更新为 3.9.3 ,并注意到 MySQL 5.6中包含enum个字段的表的模型数据库是使用String类型生成的。

对应于该字段的枚举正确生成,它只是没有链接到与该表对应的pojo。

CREATE TABLE foo (
  bar ENUM('BarBar') NOT NULL
}

这是表 Foo

生成Pojo的示例
@Generated(
    value = {
        "http://www.jooq.org",
        "jOOQ version:3.9.0"
    },
    comments = "This class is generated by jOOQ"
)
public class Foo {
    private String bar;
}

的枚举链接到表pojo,虽然在其名称中包含表的 Foo 前缀:

@Generated(
    value = {
        "http://www.jooq.org",
        "jOOQ version:3.9.0"
    },
    comments = "This class is generated by jOOQ"
)
public enum FooBar implements EnumType {

    BarBar("BarBar");

    private final String literal;

    // ...
}

我没有更改任何配置,只是jooq版本。我想知道这是否是一个错误,或者很可能是我身边缺少一些配置。

此更改是在 3.8.8 3.9.0 版本之间引入的,但我无法从发行说明中缩小范围。

有一个issue对应于此但它不应该上线,所以它可能是我过时的配置。

1 个答案:

答案 0 :(得分:2)

出现这种情况有两个原因:

jOOQ中与<outputSchemaToDefault/>

相关的错误

这看起来像错误

  • #6367 - 当<outputSchemaToDefault/>为真时,PostgreSQL枚举无法从生成的表格中正确链接
  • #6395 - 当<outputSchemaToDefault/>设置为true时,Definition.getQualifiedName()错误

将在jOOQ 3.10.0,3.9.4,3.8.8中修复。该问题与将<outputSchemaToDefault/>标志设置为true有关。

您已使用配置

排除枚举类型

<includes/><excludes/>配置必须确保包含枚举类型作为代码生成输出。枚举类型是一种合成类型,其行为类似于PostgreSQL枚举类型。它的合成名称来自:[TABLE_NAME]_[COLUMN_NAME]

注意:在您的情况下,我假设这是正确完成的,因为您自己获取了枚举类型。我在这里添加了这个完整性&#39;为了其他人有类似的问题。