我们在Postgres 9.5中使用JOOQ 3.7.3。我们利用Postgres' enum
类型并将它们映射到我们自己的(手写)Java枚举。到目前为止,JOOQ元模型看起来像这样:
TableField<InvoiceAccountingEntryRecord, AccountingTypeEnum> ACCOUNTING_TYPE =
createField("accounting_type",
org.jooq.util.postgres.PostgresDataType.VARCHAR.asEnumDataType(com.us.app.schema.enums.AccountingTypeEnum.class),
this,
"");
使用JOOQ生成的枚举使Schema生成变得容易,但我们需要大量的显式映射。我们想直接在JOOQ模型中使用我们自己的枚举类型,并在JOOQ生成器配置中为每个类型定义一个自定义绑定:
<customType>
<name>AccountingTypeEnum</name>
<type>com.us.own.enums.AccountingType</type>
<binding>com.us.own.enums.AccountingType.AccountingTypeJooqBinding</binding>
</customType>
...
<forcedType>
<name>AccountingTypeEnum</name>
<expression>.*ACCOUNTING_TYPE</expression>
</forcedType>
奇怪的是,这不仅影响了字段的值类型,还影响了DataType
,后者更改为DefaultDataType.getDefaultDataType("USER-DEFINED")
,DataType<Object>
:
TableField<InvoiceAccountingEntryRecord, AccountingType> ACCOUNTING_TYPE =
createField("accounting_type",
org.jooq.impl.DefaultDataType.getDefaultDataType("USER-DEFINED"),
this,
"",
new AccountingTypeJooqBinding());
为什么会这样,我可以确定我之前使用过的DataType<AccountingTypeEnum>
吗?
答案 0 :(得分:1)
经过一些实验,结果证明这确实是JOOQ发生器中的一个错误,它影响3.7.3但在3.10.3中不再存在。是时候升级了!