我需要更改存储在H2DB中的序列的返回值,当我通过直接SQL查询调用nextVal时,H2返回一个BigInt,我需要一个BigDecimal。
我无法转换或转换此值,我需要H2返回BigDecimal。
我怎么能这样做?
编辑:我无法更改Java代码,因为我正在测试,因此不能选择从DB转换或转换请求值。
答案 0 :(得分:3)
如果允许替换H2 jar文件,您可以创建自己的修补版H2。
在org.h2.expression.Function
更改
addFunctionNotDeterministic("NEXTVAL", NEXTVAL,
VAR_ARGS, Value.LONG);
到
addFunctionNotDeterministic("NEXTVAL", NEXTVAL,
VAR_ARGS, Value.DECIMAL);
并在org.h2.expression.SequenceValue
更改
@Override
public Value getValue(Session session) {
long value = sequence.getNext(session);
session.setLastIdentity(ValueLong.get(value));
return ValueLong.get(value);
}
@Override
public int getType() {
return Value.LONG;
}
到
@Override
public Value getValue(Session session) {
long lv = sequence.getNext(session);
ValueDecimal value = ValueDecimal.get(BigDecimal.valueOf(lv));
session.setLastIdentity(value);
return value;
}
@Override
public int getType() {
return Value.DECIMAL;
}
答案 1 :(得分:0)
我试图从wero的答案中获取代码,并将其变成H2本身的功能。
此GitHub分支:https://github.com/portofrotterdam/h2database在H2中使用'MODE = Oracle'时返回BigDecimals而不是BigInteger / longs,从而使其与Oracle数据库更加兼容。
我已请求拉到主服务器,所以也许此行为将在h2database中可用。