JOOQ 强制类型将 BigInteger 转换为 BigDecimal for POSTGRES

JOOQ Forced types to convert a BigInteger to BigDecimal for POSTGRES

对于 Table ,假设我的Table,我有一个列 myColumn..

默认的 JOOQ 生成将 myColumn 创建为 BigInteger,

我想将其创建为 BigDecimal。

这是我正在使用的转换器。

public class myConverter extends AbstractConverter<BigInteger, BigDecimal> {

    public BigIntToBigDecConverter(Class<BigInteger> fromType, Class<BigDecimal> toType) {

        super(fromType, toType);
    }

    @Override
    public BigDecimal from(BigInteger databaseObject) {
        return new BigDecimal(databaseObject);
    }

    @Override
    public BigInteger to(BigDecimal userObject) {
        return new BigInteger(String.valueOf(userObject.intValue()));
    }
}

XML 文件中的 forceType 配置应该是什么样的?

之所以将您的列生成为 BigInteger,是因为它们属于 NUMERIC(n, 0)NUMBER(n, 0)DECIMAL(n, 0) 类型,具体取决于您使用的方言使用,但这里的关键是比例是 0n 足够大以至于它不再适合 Long

您的 <forcedType/> 配置不起作用的原因是您在 <types/> 中列出的类型是 Java 类型 BigInteger,而不是 SQLDataTypesee documentation here。为了重写所有零刻度小数以产生 BigDecimal,只需这样写:

<forcedType>
  <name>NUMERIC</name>
  <inputTypes>(?i:(NUMERIC|NUMBER|DECIMAL)\(\d+,0\))</inputTypes>
</forcedType>

您不需要定制转换器