Estoy usando la API javax.persistence y Hibernate para crear anotaciones y persistir entidades y sus atributos en una base de datos Oracle 11g Express.La precisión BigDecimal no persistió con las anotaciones JPA
que tienen el atributo siguiente en una entidad:
@Column(precision = 12, scale = 9)
private BigDecimal weightedScore;
El objetivo es que persista un valor decimal con un máximo de 12 dígitos y un máximo de 9 de esos dígitos a la derecha del punto decimal.
Después de calcular weightedScore
, el resultado es 0.1234, pero una vez que confirmo la entidad con la base de datos Oracle, el valor se muestra como 0.12.
Puedo ver esto usando un objeto EntityManager para consultar la entrada o visualizándola directamente en la interfaz de Oracle Application Express (Apex) en un navegador web.
¿Cómo debo anotar mi atributo BigDecimal por lo que la precisión se conserva correctamente?
Nota: utilizamos una base de datos HSQL en memoria para ejecutar nuestras pruebas unitarias, y no experimenta el problema con la falta de precisión, con o sin la anotación @Column
.
Actualización:
En cuanto a la descripción de la tabla, la definición de la columna de weightedScore
es NUMBER(19, 2)
. Ahora también he intentado cambiar la anotación a @Column(columnDefinition="Number(12, 9)")
, pero esto no ha tenido ningún efecto. ¿Alguien sabe por qué Oracle no responde a estas anotaciones?
El bug-informe también dice que el fallo sólo se aplica a valores mayores que 9.223.372.036.854.775.808 y que ha sido _fixed_. – Ben