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)
类型,具体取决于您使用的方言使用,但这里的关键是比例是 0
,n
足够大以至于它不再适合 Long
。
您的 <forcedType/>
配置不起作用的原因是您在 <types/>
中列出的类型是 Java 类型 BigInteger
,而不是 SQLDataType
、see documentation here。为了重写所有零刻度小数以产生 BigDecimal
,只需这样写:
<forcedType>
<name>NUMERIC</name>
<inputTypes>(?i:(NUMERIC|NUMBER|DECIMAL)\(\d+,0\))</inputTypes>
</forcedType>
您不需要定制转换器
对于 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)
类型,具体取决于您使用的方言使用,但这里的关键是比例是 0
,n
足够大以至于它不再适合 Long
。
您的 <forcedType/>
配置不起作用的原因是您在 <types/>
中列出的类型是 Java 类型 BigInteger
,而不是 SQLDataType
、see documentation here。为了重写所有零刻度小数以产生 BigDecimal
,只需这样写:
<forcedType>
<name>NUMERIC</name>
<inputTypes>(?i:(NUMERIC|NUMBER|DECIMAL)\(\d+,0\))</inputTypes>
</forcedType>
您不需要定制转换器