3

我正在使用 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 放在强制类型中,但不适用于 SQLDataType.NUMERIC。

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

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

4

1 回答 1

0

DECIMAL在大多数方言中,和之间的区别NUMERIC并不重要,尤其是当您从预先存在的 DDL 语句生成客户端代码时。绑定类型变量的客户端逻辑与DECIMALjOOQNUMERIC中几乎相同。

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

<includeExpression>(?i:.*\.num_field)</includeExpression>
于 2020-11-09T08:40:23.233 回答