JOOQ forcedType 无法通过 JPADatabase 代码生成 NUMERIC SQL 数据类型

JOOQ forcedType unable to generate NUMERIC SQL data type via JPADatabase code gen

我正在使用 JPADatabase 从我现有的 JPA 实体生成 JOOQ 类。从手册中,我知道 JPADatabase 在内部使用 H2 数据库来读取元数据模式并生成代码。 由于 H2 数据库没有 Numeric 的数据类型,而是 Decimal。因此我所有的数字数据类型都转换为 SQLDataType.DECIMAL.

public final TableField<MyTableRecord, BigDecimal> NUM_FIELD = createField(DSL.name("NUM_FIELD"), SQLDataType.DECIMAL, this, "");

我什至尝试在运行代码生成时使用forcedType强制生成SQLDataType.NUMERIC,但结果仍然显示SQLDataType.DECIMAL。我发现它甚至适用于 Double,如果我将 SQLDataType.DOUBLE 放入 forcedType,但不适用于 SQLDataType.NUMERIC.

<forcedTypes>
                    <forcedType>
                      <name>NUMERIC</name>
                      <includeExpression>.*\.num_field</includeExpression>
                      <includeTypes>.*</includeTypes>
                      <nullability>ALL</nullability>
                      <objectType>ALL</objectType>
                    </forcedType>
                  </forcedTypes>

有没有办法让 JPADatabase 代码生成生成 SQLDataType.NUMERIC?

在大多数方言中,DECIMALNUMERIC 之间的区别应该无关紧要,尤其是当您从 pre-existing DDL 语句生成客户端代码时。绑定DECIMALNUMERIC类型变量的客户端逻辑在jOOQ中几乎相同。

您的强制类型可能未应用的原因是正则表达式区分大小写。如您生成的代码所示,该列称为 NUM_FIELD(大写)。解决此问题的一种方法是使正则表达式不区分大小写:

<includeExpression>(?i:.*\.num_field)</includeExpression>