有 Java 编程相关的问题?

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

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

对于一个表,比如说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()));
    }
}

forceType配置在XML文件中应该是什么样子


共 (1) 个答案

  1. # 1 楼答案

    之所以将列生成为BigInteger,是因为它们的类型是NUMERIC(n, 0)NUMBER(n, 0)DECIMAL(n, 0),这取决于您使用的方言,但这里的关键是比例是0,并且n足够大,无法再容纳Long

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

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

    你不需要定制转换器