BigDecimal Präzision nicht dauerhaft mit JPA-Annotationen
Ich bin mit dem javax.persistence API und Hibernate mit Anmerkungen versehen und speichern von Entitäten und Ihre Attribute in einer Oracle 11g Express-Datenbank.
Habe ich das folgende Attribut in einer Entität:
@Column(precision = 12, scale = 9)
private BigDecimal weightedScore;
Ziel ist die Persistenz von einem decimal-Wert mit maximal 12-stellig und maximal 9 von diesen Ziffern rechts von der Dezimalstelle.
Nach der Berechnung weightedScore
, das Ergebnis ist 0.1234, aber sobald ich verpflichte mich, das Unternehmen mit der Oracle-Datenbank, der Wert zeigt als 0.12.
Ich sehen kann, entweder durch Verwendung einer EntityManager-Objekt für die Abfrage der Eintrag oder die Anzeige direkt in die Oracle Application Express (Apex) - Schnittstelle in einem web-browser.
Wie soll ich kommentieren meine BigDecimal-Attribut, so dass die Genauigkeit beibehalten wird, richtig?
Hinweis: Wir verwenden eine in-memory-HSQL-Datenbank für die Ausführung unserer unit-tests, und es nicht erleben das Problem mit der fehlenden Präzision, mit oder ohne @Column
annotation.
Update:
Blick auf die Tabelle die Beschreibung, die definition der weightedScore
Spalte ist NUMBER(19, 2)
. Ich habe jetzt auch versucht, die änderung der Anmerkung zu @Column(columnDefinition="Number(12, 9)")
, aber dies hatte keine Wirkung. Weiß jemand, warum Oracle nicht mehr auf diese Anmerkungen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich die Antwort. Huzzah!
Ich habe versucht, führen Sie die folgende Abfrage, die über das Oracle Apex-Schnittstelle:
alter table NODE modify (WEIGHTEDSCORE NUMBER(12, 9));
Erhielt ich eine Fehlermeldung, die besagt, dass eine Spalte enthält Daten, die nicht geändert werden kann zu weniger Präzision oder weniger scale. Das war mein Problem!
Weil ich versuchte, zu ändern, Tabelle mit vorhandenen Daten, die ich brauchte, um entweder die Tabelle löschen und neu initialisieren, oder ändern Sie die Spalte, zu der nur mehr Genauigkeit und dezimalstellenanzahl.
Versuchte ich die folgende Abfrage mit Erfolg:
alter table NODE modify (WEIGHTEDSCORE NUMBER(26, 9));
Die Argumentation ist, dass ich möchte hinzufügen 7 stellen Genauigkeit nach rechts von der Dezimalstelle, so dass ich bin das hinzufügen 7, um die Allgemeine Genauigkeit zu kompensieren, die Erhöhung der Skala. So, die Spalte können damit alle vorhandenen Präzision auf die Links von der Dezimalstelle beim hinzufügen von Präzision auf der rechten Seite.
Scheint es, du bist nicht der einzige der Probleme mit diesem: http://www.eclipse.org/forums/index.php/m/716826/