Détails forts> p> base de données: Oracle 11g
Définition du champ: numérique (8,2) p> Mappage getter / setter p>
3 Réponses :
50,2 est identique à 50.20, 50.200, etc. Si vous souhaitez l'afficher avec deux chiffres, utilisez java.text.decimalformat.format (..) code> p>
Spécification de la précision limite le nombre maximum de chiffres décimaux, pas le minimum. P>
Ya mais pourquoi hiberniserait-il la coupe? Dans la base de données sa 50.20, ma classe de cartographie ne devrait pas couper le trailing 0 Je penserais par défaut.
C'est juste un problème de présentation. Noone Garnies Le zéro, il n'est tout simplement pas affiché par Tostring.
Vous voulez dire le Tostring même dans le débogueur? Le prix est mappé sur un bigdecimal. Dans mon code lorsque j'ai défini le point de pause sur le point où il reçoit cette liste des valeurs d'objet, je vois la valeur mappée comme 58.2. Aucune totring n'est pas encore appelée. Je pensais juste que d'avoir cette annotation de précision sur mon @Column, il conserverait la valeur.
Comme je l'ai dit, la précision concerne le maximum. Pour définir la manière dont vous souhaitez l'afficher, utilisez un format décimal.
Le débogueur utilise Tostring pour afficher les BigDecimaux.
Je peux vous dire que la création de la valeur J'en ai trouvé cela en tranchant le code source hibernate avec un débogueur, tout en essayant de trouver la réponse à ma propre question . p>
Il semble que certaines implémentations de la méthode Voir aussi cette autre question . p> BigDecimal CODE> Revenant de la base de données est effectuée par la mise en œuvre exclusive du pilote JDBC de la méthode getbigdecimal code> de la base de données spécifique ResultatsSet code> Sous-classe. P>
getbigdecimal code> utilisent la précision / échelle définie dans le schéma de base de données ou tenteront d'optimiser le bigdecimal code> renvoyé par définition La précision / échelle minimale requise pour contenir la valeur récupérée. Je suppose que le pilote Oracle fait ce dernier. P>
dans la classe logique des affaires Vous pouvez définir de la valeur de cette manière aussi: p>
objet_name.setprice (nouveau bigdecimal (50.20)); strong> p>
Lorsque j'exécute l'hibernate .Betlist, il saisit 50,2 et pas 50,20 comme dans la base de données. La seule chose à laquelle je puisse penser, c'est qu'il a à voir avec la cartographie sur le terrain. J'ai aussi essayé de faire un double, n'a fait aucune différence.