J'ai un double que j'essaie d'enregistrer dans une colonne numérique postgres. La valeur que j'essaye de sauver est 151.33160591125488, et j'ai vérifié que c'est en fait l'argument étant reçu par les internes d'Hibernates pré-insèrent.Hibernate arrondit mon double?
Cependant, la valeur dans l'insertion de la base de données est 151,331605911255, c'est-à-dire arrondie à 12dp.
Je sais que ma colonne est de l'échelle de droite, comme il est une colonne numérique sans restriction et les suivantes ...
update tbl set col=151.33160591125488
... a l'effet désiré. Donc, le coupable doit être Hibernate ou le pilote postgres-JDBC.
Des idées?
EDIT:
org.hibernate.dialect.PostgreSQLDialect:
registerColumnType(Types.DOUBLE, "float8");
et
select cast (151.33160591125488 as float8);
= 151,331605911255
le comportement par défaut pour le double est donc incorrect, comme ne sauvegarde pas toujours le double fourni.
Est-ce que quelqu'un sait comment obtenir hibernate pour utiliser le type de colonne "numérique" dans postgres?
Vous n'avez pas vraiment donné suffisamment de détails sur le côté hibernation. Le mappage peut spécifier la précision et l'échelle. par exemple: –
Merci brian, je vais essayer mais cela réduirait l'évolutivité de mon application, tout simplement parce que Hibernate se comporte mal. java double ne restreint pas, postgres ne restreint pas, pourquoi hiberner? – pstanton
J'ai essayé avec précision = "30" échelle = "20" qui aurait dû être en abondance, même résultat. si mauvais conseil. – pstanton