我需要更改存储在H2DB中的序列的返回值,当我通过一个直接SQL查询H2调用nextVal时,返回一个BigInt,而我需要一个BigDecimal。
我不能转换或转换这个值,我需要H2返回一个BigDecimal。
我怎么能这么做?
编辑:我无法更改Java代码,因为我正在测试,所以不能选择从DB强制转换或转换请求值。
发布于 2015-09-21 08:09:37
如果允许您替换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;
} 发布于 2019-08-26 09:03:25
我尝试从wero的答案中提取代码,并将其转化为H2本身的一个特性。
这个GitHub叉:当在H2中使用'MODE=Oracle‘时,https://github.com/portofrotterdam/h2database返回BigDecimals而不是BigInteger/longs,这使得它更符合甲骨文的数据库。
我已经请求拉到主程序,所以这种行为可能在h2database中是可用的。
https://stackoverflow.com/questions/30372769
复制相似问题