java - 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 配置应该是怎样的?
解决方案
生成列的原因BigInteger
是因为它们的类型为NUMERIC(n, 0)
,NUMBER(n, 0)
或DECIMAL(n, 0)
取决于您使用的方言,但这里的关键是比例为0
, 并且n
足够大以至于不再适合Long
a .
您的配置不起作用的原因<forcedType/>
是因为您列出的类型<types/>
是 Java 类型BigInteger
,而不是SQLDataType
,请参阅此处的文档。为了重写所有零刻度小数以产生BigDecimal
,只需写下:
<forcedType>
<name>NUMERIC</name>
<inputTypes>(?i:(NUMERIC|NUMBER|DECIMAL)\(\d+,0\))</inputTypes>
</forcedType>
您不需要客户转换器
推荐阅读
- javascript - 当文本字段值更改时,Magento 显示/隐藏渲染按钮
- c# - 在 winform 或 WPF 中使用“toast 通知”
- vba - VBA - 隐藏行宏限制
- lua - Lua table.insert 不起作用
- amazon-web-services - Terraform:如何从一个资源块创建多个 aws 子网?
- node.js - 无法使用 Firebase Cloud Functions 创建 xlsx 文件
- go - Cookie returning validity error
- laravel - The page has expired due to inactivity. Why?
- ios - Programmatically created tableview delegate not working
- python - PyQt4 QWebPage 设置 Qtimer 用于额外时间渲染 Javascript