JOOQ 强制类型将 BigInteger 转换为 BigDecimal 以用于 POSTGRES
Posted
技术标签:
【中文标题】JOOQ 强制类型将 BigInteger 转换为 BigDecimal 以用于 POSTGRES【英文标题】:JOOQ Forced types to convert a BigInteger to BigDecimal for POSTGRES 【发布时间】:2021-12-16 16:35:45 【问题描述】:对于一个表,假设是 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 文件中应该是怎样的?
【问题讨论】:
你尝试过什么from here?为什么它不起作用? @LukasEder 我试过这个```您的列生成为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>
您不需要定制转换器
【讨论】:
如果我想对特定表的单个列执行此操作怎么办 然后只需将常用的<includeExpression>
正则表达式添加到<forcedType>
以上是关于JOOQ 强制类型将 BigInteger 转换为 BigDecimal 以用于 POSTGRES的主要内容,如果未能解决你的问题,请参考以下文章
java中BigDecimal和bigInteger如何转换
使用 MSSQL 数据库类型别名,jooq 3.7.3 将它们转换为正确的 Java 类型,但 3.12.3 将它们全部转换为 Java 类型 Object