我正在将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对应于此但它不应该上线,所以它可能是我过时的配置。
答案 0 :(得分:2)
出现这种情况有两个原因:
<outputSchemaToDefault/>
这看起来像错误
<outputSchemaToDefault/>
为真时,PostgreSQL枚举无法从生成的表格中正确链接<outputSchemaToDefault/>
设置为true时,Definition.getQualifiedName()错误将在jOOQ 3.10.0,3.9.4,3.8.8中修复。该问题与将<outputSchemaToDefault/>
标志设置为true有关。
<includes/>
和<excludes/>
配置必须确保包含枚举类型作为代码生成输出。枚举类型是一种合成类型,其行为类似于PostgreSQL枚举类型。它的合成名称来自:[TABLE_NAME]_[COLUMN_NAME]
。
注意:在您的情况下,我假设这是正确完成的,因为您自己获取了枚举类型。我在这里添加了这个完整性&#39;为了其他人有类似的问题。