2015-05-21 29 views
6

Ho bisogno di cambiare il valore restituito di una sequenza memorizzata in un H2DB, quando chiamo nextVal attraverso una query SQL diretta H2 restituisco un BigInt e ho bisogno di un BigDecimal.Cambia tipo di dati di una sequenza H2DB

Non riesco a trasmettere o convertire questo valore, ho bisogno di H2 restituendo un BigDecimal.

Come posso farlo?

MODIFICA: Non riesco a modificare il codice Java perché sto provando a trasmettere o convertire il valore della richiesta dal DB non è un'opzione.

+0

Anche io sono interessato a questa domanda. Continuerò a fare ricerche per conto mio, ma spero che questa domanda abbia maggiore attenzione. –

risposta

3

È possibile creare la propria versione patch di H2, se è consentito sostituire il file jar H2.

In org.h2.expression.Function cambiamento

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

a

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

in org.h2.expression.SequenceValue cambiamento

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

a

@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

Non testato, ma le modifiche al codice sembrano essere corrette. – wero

+0

Interessante, dovrò testare e tornare da te. Finora, questo sembra l'approccio migliore che ho visto. –