更改序列 H2DB 的数据类型
Change datatype of a sequence H2DB
我需要更改存储在 H2DB 中的序列的 returned 值,当我通过直接 SQL 查询 H2 return 调用 nextVal 时,我需要一个 BigInt BigDecimal.
我无法转换或转换此值,我需要 H2 returning BigDecimal。
我该怎么做?
编辑:我无法更改 Java 代码,因为我正在测试,所以无法转换或转换来自数据库的请求值。
如果允许替换 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;
}
我尝试从 wero 的回答中获取代码并将其作为 H2 本身的一个功能。
这个 GitHub 分支:在 H2 中使用 'MODE=Oracle' 时,https://github.com/portofrotterdam/h2database returns BigDecimals 而不是 BigInteger/longs,使其与 Oracle 数据库更加兼容。
我已经向 master 请求拉取,所以也许这种行为将在 h2database 中可用。
我需要更改存储在 H2DB 中的序列的 returned 值,当我通过直接 SQL 查询 H2 return 调用 nextVal 时,我需要一个 BigInt BigDecimal.
我无法转换或转换此值,我需要 H2 returning BigDecimal。
我该怎么做?
编辑:我无法更改 Java 代码,因为我正在测试,所以无法转换或转换来自数据库的请求值。
如果允许替换 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;
}
我尝试从 wero 的回答中获取代码并将其作为 H2 本身的一个功能。
这个 GitHub 分支:在 H2 中使用 'MODE=Oracle' 时,https://github.com/portofrotterdam/h2database returns BigDecimals 而不是 BigInteger/longs,使其与 Oracle 数据库更加兼容。
我已经向 master 请求拉取,所以也许这种行为将在 h2database 中可用。