2015-05-21 19 views
6

Tôi cần phải thay đổi giá trị trả về của chuỗi được lưu trữ thành H2DB, khi tôi gọi nextVal thông qua truy vấn SQL trực tiếp H2 trả về BigInt và tôi cần BigDecimal.Thay đổi kiểu dữ liệu của một chuỗi H2DB

Tôi không thể truyền hoặc chuyển đổi giá trị này, tôi cần H2 trả về BigDecimal.

Tôi có thể làm như thế nào?

EDIT: Tôi không thể thay đổi mã Java bằng cách sử dụng Tôi đang thử nghiệm để truyền hoặc chuyển đổi giá trị yêu cầu từ DB không phải là một tùy chọn.

+0

Tôi cũng quan tâm đến câu hỏi này. Tôi sẽ tiếp tục tự nghiên cứu, nhưng tôi hy vọng câu hỏi này sẽ được chú ý nhiều hơn. –

Trả lời

3

Bạn có thể tạo phiên bản H2 được vá riêng, nếu bạn được phép thay thế tệp H2.

Trong org.h2.expression.Function thay đổi

addFunctionNotDeterministic("NEXTVAL", NEXTVAL, 
      VAR_ARGS, Value.LONG); 

để

addFunctionNotDeterministic("NEXTVAL", NEXTVAL, 
      VAR_ARGS, Value.DECIMAL); 

và trong org.h2.expression.SequenceValue thay đổi

@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; 
} 
+0

Không thử nghiệm điều này, nhưng những thay đổi mã dường như là thẳng. – wero

+0

Thú vị, tôi sẽ phải kiểm tra và lấy lại cho bạn. Cho đến nay, điều này có vẻ như cách tiếp cận tốt nhất mà tôi đã nhìn thấy. –

Các vấn đề liên quan