java在向postgresenumtyped`TableField添加自定义`Binding`时,字段的`DataType`发生意外更改`
我们在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生成的枚举可以轻松地生成模式,但我们需要大量显式映射。我们希望在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")
,a DataType<Object>
:
TableField<InvoiceAccountingEntryRecord, AccountingType> ACCOUNTING_TYPE =
createField("accounting_type",
org.jooq.impl.DefaultDataType.getDefaultDataType("USER-DEFINED"),
this,
"",
new AccountingTypeJooqBinding());
这是为什么?我能确保我得到它以前使用过的DataType<AccountingTypeEnum>
吗
# 1 楼答案
经过一些实验,这确实是JOOQ生成器中的一个错误,它影响了3.7.3,但在3.10.3中不再存在。是时候升级了