首页 > 解决方案 > JOOQ 强制类型将 BigInteger 转换为 BigDecimal 以用于 POSTGRES

问题描述

对于 Table ,可以说 myTable,我有一个列 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 配置应该是怎样的?

标签: javasqljooq

解决方案


生成列的原因BigInteger是因为它们的类型为NUMERIC(n, 0),NUMBER(n, 0)DECIMAL(n, 0)取决于您使用的方言,但这里的关键是比例为0, 并且n足够大以至于不再适合Longa .

您的配置不起作用的原因<forcedType/>是因为您列出的类型<types/>是 Java 类型BigInteger,而不是SQLDataType请参阅此处的文档。为了重写所有零刻度小数以产生BigDecimal,只需写下:

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

您不需要客户转换器


推荐阅读