Hibernate MS-SQL Mauvais type de colonne Trouvée: décimal, attendu: float
Remarque: la Réponse à la fin de la question
J'ai créé quelques colonnes dans ma base de données SQL et n'ont évidemment pas créé de point flottant avant parce que j'ai eu à le regarder. Pour SQL conformité, j'ai créé mes colonnes ainsi:
ALTER TABLE capteur
AJOUTER Field1_Calibration_Offset DÉCIMAL(4, 3);
Fois 8 pour chaque colonne.
Je l'ai défini dans mon code java:
@Column(name = "FIELD1_CALIBRATION_OFFSET")
flottant privé field1CalibrationOffset;
qui a généré l'erreur:
Mauvais type de colonne dans le PsDb.dbo.Capteur pour la colonne FIELD1_CALIBRATION_OFFSET. Trouvé: décimal, attendu: float
Réponse Finale
Suivant @jbrookover la réponse ci-dessous, j'ai changé pour BigDecimal, j'ai eu:
Wrong column type in PsDb.dbo.Sensor for column FIELD1_CALIBRATION_OFFSET. Found: decimal, expected: numeric(19,2)
Alors j'ai cherché de mon hibernation mappages et n':
@Column(name = "FIELD1_CALIBRATION_SCALE", columnDefinition="decimal", precision=4, scale=3)
private BigDecimal field1CalibrationScale;
OriginalL'auteur Thom | 2011-10-10
Vous devez vous connecter pour publier un commentaire.
J'ai tendance à laisser Hibernate créer mes tables, donc je ne suis pas 100% sur, mais il n'y a aucune raison de supposer que Java flottant cartes à MySQL DÉCIMALE. En fait, selon la documentation, la DÉCIMALE est un type exact tandis que le FLOTTEUR et le RÉEL ne sont que des approximations. Je crois que Java flottant est une approximation, si cette disparité semble logique.
Si vous souhaitez utiliser MySQL DÉCIMAL, essayez de Java
java.math.BigDecimal
au lieu dejava.lang.Float
.Après le passage à BigDecimal, j'ai eu: Mauvais type de colonne dans le PsDb.dbo.Capteur pour la colonne FIELD1_CALIBRATION_OFFSET. Trouvé: décimal, attendu: numérique(19,2) Alors j'ai cherché de mon hibernation mappages et n': @Column(name = "FIELD1_CALIBRATION_SCALE", columnDefinition="decimal", précision=4, scale=3) privé BigDecimal field1CalibrationScale;
merci @TheThom votre commentaire juste sauvé mon cul
OriginalL'auteur jbrookover
J'ai rencontré ce problème moi-même, à l'aide de Jboss 7 et MSSQL.
Je crois que @Thom réponse est bonne et mérite plus d'exposition.
veuillez noter que le nom du paramètre est facultatif si votre valeur a le même nom que la colonne de base de données.
Je ne voulais pas poster comme question, mais plus comme une réponse. Tom mentionné cette solution dans un commentaire à la réponse ci-dessus. J'ai personnellement vu ce post 2 fois avant de me rendre compte que la réponse à sa question initiale était caché dans un commentaire à la réponse ci-dessus.
mon erreur. Je moiet réponse.
Merci pour les commentaires. J'ai constitué ma réponse dans la question, de sorte qu'il est plus facile à trouver. Veuillez upvote pour accroître la visibilité.
Cela a fonctionné pour mon décimal(22,4) précision=22, scale=4 pour BigDecimal. Merci homme.
OriginalL'auteur andreico