Comment puis-je carte un BigDecimal en veille prolongée afin que je revienne à la même échelle que j'ai mis dans?
En Java, new BigDecimal("1.0") != new BigDecimal("1.00")
c'est à dire, l'échelle questions.
Ce n'est apparemment pas le cas pour Hibernate/SQL Server, cependant. Si je l'ai mis à l'échelle sur un BigDecimal à une valeur particulière, enregistrez le BigDecimal à la base de données via Hibernate et puis re-gonfler mon objet, je serai de retour un BigDecimal avec une échelle différente.
Par exemple, une valeur de 1,00 est de retour en tant que 1.000000, je suppose parce que nous sommes cartographie BigDecimals à une colonne définie comme NUMERIC(19,6)
. Je ne peux pas il suffit de définir la colonne de l'échelle que j'ai besoin de stocker à la fois au Dollar et au Yen valeurs (par exemple) dans la même colonne. Nous avons besoin de représenter l'BigDecimals que les types numériques dans la base de données pour le bénéfice de l'externe, les outils de reporting.
Existe-t-il une Hibernate UserType les cartes BigDecimal "correctement", ou dois-je écrire mon propre?
Vous devez vous connecter pour publier un commentaire.
Juste pour information souci, je peux vous dire que la création de la BigDecimal de retour à partir de la base de données est effectuée par le propriétaire du pilote JDBC de la mise en œuvre de la "getBigDecimal' méthode de la base de données spécifique "ResultSet" sous-classe.
J'ai trouvé ce stepping jusqu'à Hibernate de code source avec un débogueur, tout en essayant de trouver la réponse à ma propre question.
Je pense que cela va fonctionner, je n'ai pas testé si.
Pas sûr, mais vous pouvez vérifier l'égalité à l'aide de
a.compareTo(b) == 0
.String.format(String, Object...)
vous aidera à résoudre ce problème.