for a Table , lets say myTable, I have a column myColumn..
the default JOOQ generation creates myColumn as BigInteger,
I want to create it as BigDecimal.
This is the converter I am using.
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()));
}
}
How should be the forceType configuration look like in the XML file?
The reason why your columns are generated as BigInteger
is because they're of type NUMERIC(n, 0)
, NUMBER(n, 0)
, or DECIMAL(n, 0)
depending on the dialect you're using, but the key here is that the scale is 0
, and n
is large enough that it doesn't fit in a Long
anymore.
The reason why your <forcedType/>
configuration hasn't worked is because the type you've listed in <types/>
is the Java type BigInteger
, not the SQLDataType
, see documentation here. In order to rewrite all zero scale decimals to produce BigDecimal
, just write this:
<forcedType>
<name>NUMERIC</name>
<inputTypes>(?i:(NUMERIC|NUMBER|DECIMAL)\(\d+,0\))</inputTypes>
</forcedType>
You won't need a custome converter for that