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 楼答案
之所以将列生成为
BigInteger
,是因为它们的类型是NUMERIC(n, 0)
、NUMBER(n, 0)
或DECIMAL(n, 0)
,这取决于您使用的方言,但这里的关键是比例是0
,并且n
足够大,无法再容纳Long
您的
<forcedType/>
配置不起作用的原因是<types/>
中列出的类型是Java类型BigInteger
,而不是SQLDataType
,see documentation here。为了重写所有零小数以产生BigDecimal
,只需编写以下代码:你不需要定制转换器