#java #sql #jooq
Вопрос:
для таблицы , скажем, 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-файле?
Комментарии:
1. Что вы пробовали отсюда ? Почему это не сработало?
2. @LukasEder Я попробовал это « <Принудительные типы> <Принудительные типы><Принудительный тип> <Принудительный тип><Тип пользователя>java.math.BigDecimal<Тип пользователя></Тип пользователя> </Тип пользователя><конвертер>xyz.myclass. BigIntToBigDecConverter</конвертер> </конвертер><типы>BigInteger.*<типы></типы> </типы><includeExpression>*<includeExpression></includeExpression> </includeExpression></forcedType> </forcedType></forcedTypes> ` в журналах не отображаются какие-либо конкретные ошибки.
3. Вы можете отредактировать свой вопрос, чтобы добавить более подробную информацию…
Ответ №1:
Причина, по которой ваши столбцы генерируются как BigInteger
, заключается в том, что они NUMERIC(n, 0)
имеют тип NUMBER(n, 0)
, или DECIMAL(n, 0)
в зависимости от используемого вами диалекта, но ключевым моментом здесь является то, что масштаб 0
n
достаточно велик, чтобы он больше не вписывался Long
.
Причина , по которой ваша <forcedType/>
конфигурация не сработала , заключается в том, что указанный вами тип <types/>
является типом Java BigInteger
, а не SQLDataType
, см. Документацию здесь. Чтобы переписать все десятичные дроби нулевой шкалы для получения BigDecimal
, просто напишите это:
<forcedType>
<name>NUMERIC</name>
<inputTypes>(?i:(NUMERIC|NUMBER|DECIMAL)(d ,0))</inputTypes>
</forcedType>
Для этого вам не понадобится конвертер custome
Комментарии:
1. Что делать, если я хочу сделать это для одного столбца определенной таблицы
2. Затем просто добавьте обычное
<includeExpression>
регулярное выражение в<forcedType>