有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    经过一些实验,这确实是JOOQ生成器中的一个错误,它影响了3.7.3,但在3.10.3中不再存在。是时候升级了