Sto utilizzando l'API javax.persistence e Hibernate per creare annotazioni e entità permanenti e i relativi attributi in un database Oracle 11g Express.Grande precisione digitale non persistente con annotazioni JPA
Ho il seguente attributo in un'entità:
@Column(precision = 12, scale = 9)
private BigDecimal weightedScore;
L'obiettivo è di persistere un valore decimale con un massimo di 12 cifre e un massimo di 9 di tali cifre a destra del decimale.
Dopo aver calcolato weightedScore
, il risultato è 0.1234, ma dopo aver eseguito il commit dell'entità con il database Oracle, il valore viene visualizzato come 0.12.
Posso vedere questo utilizzando un oggetto EntityManager per interrogare la voce o visualizzarla direttamente nell'interfaccia Oracle Application Express (Apex) in un browser web.
Come devo annotare il mio attributo BigDecimal in modo che la precisione sia mantenuta correttamente?
Nota: Usiamo un database HSQL in memoria per eseguire i nostri test unitari e non presenta il problema con la mancanza di precisione, con o senza l'annotazione @Column
.
Aggiornamento:
Guardando la descrizione della tabella, la definizione della colonna weightedScore
è NUMBER(19, 2)
. Ho anche provato a modificare l'annotazione su @Column(columnDefinition="Number(12, 9)")
, ma questo non ha avuto alcun effetto. Qualcuno sa perché Oracle non risponde a queste annotazioni?
Il bug-report dice anche che il bug si applica solo a valori maggiori di 9.223.372.036.854.775,808 e che è stato _fixed_. – Ben