Hibernate: Trouvé: float, attendu: double précision
J'ai un problème avec la cartographie de l'Oracle Float double précision type de données de Java Double type de données. Hibernate validation de schéma semble échouer lorsque le Java Double type de données est utilisé.
org.hibernate.HibernateException: Wrong column type in DB.TABLE for column amount. Found: float, expected: double precision
La seule façon d'éviter cela est de désactiver la validation du schéma et j'espère que le schéma est en synchronisation avec l'application à exécuter. Il doit être corrigé avant qu'il ne passe à la production.
Application de l'environnement:
- Graal 1.2.1
- Hibernate-core 3.3.1.GA
- Oracle 10g
Pourriez-vous montrer comment vous en carte cette colonne? Btw, en notant que vous êtes dans les dernières minutes avant d'aller en production, vous assurez-vous juste pour obtenir les remarques d'esprit au sujet de votre médiocrité de test de votre application dans le temps 🙂
Haha 🙂 Ne vous inquiétez pas, je ne suis pas bâclée quand il s'agit de la production des choses. Il ne se passe tant qu'il n'est pas fixée. De toute façon, c'est un bug un de mes co-travailleur rencontré et je suis tout simplement essayer de l'aider. Belle remarque bien 🙂
J'ai édité ma question en fonction de votre suggestion. Thx.
J'ai peur que vous vous dirigez vers le mauvais chemin. Oracle SQL n'importe quel type de données double ou float. La seule autorisée type de données numérique de la colonne est
Haha 🙂 Ne vous inquiétez pas, je ne suis pas bâclée quand il s'agit de la production des choses. Il ne se passe tant qu'il n'est pas fixée. De toute façon, c'est un bug un de mes co-travailleur rencontré et je suis tout simplement essayer de l'aider. Belle remarque bien 🙂
J'ai édité ma question en fonction de votre suggestion. Thx.
J'ai peur que vous vous dirigez vers le mauvais chemin. Oracle SQL n'importe quel type de données double ou float. La seule autorisée type de données numérique de la colonne est
NUMBER
. Vous pouvez appeler les procédures PL/SQL avec des paramètres de type BINARY_DOUBLE, mais c'est quelque chose de différent, ce type de données ne peuvent pas être stockées dans la base de données. Si vous voulez être sûr de apaisent carte Oracle de NOMBRE (comme ses sous-types) pour Java BigDecimal.
OriginalL'auteur Frederic Morin | 2010-03-26
Vous devez vous connecter pour publier un commentaire.
Besoin de plus d'infos. La table est en Double? Je ne suis pas familier avec Oracle, mais est-ce un type à virgule flottante? Ce
java.sql.Types
type t-il traduire? Vous pouvez voir lejava.sql.Types
de type de base de données de la cartographie dans le dialecte de la classe de votre base de données. Dans ce cas, il estorg.hibernate.dialect.Oracle10gDialect
(qui s'étend à 9i et 8i). On dirait que vous avezDonc, la table doit être défini comme
double precision
, et la classe java doit être défini comme quelque chose qui va de la carte deTypes.Double
, généralementdouble
.Le message d'erreur, il ressemble à votre table est définie comme
float
qui utilisent cette cartographiepour qui l'attend java type devrait être quelque chose qui correspond à
Types.FLOAT
, généralementfloat
; une seule valeur de précision.La meilleure chose à faire est de changer votre table ou une classe java de match. Alternativement, vous pouvez spécifier un type d'utilisateur qui serait une carte d'une valeur simple précision double précision de la valeur; je ne peux pas penser à pourquoi vous voulez vraiment le faire, mais peut-être que si vous n'avez pas le contrôle à la fois la classe et la table, ce qui est assez rare, je pense.
hth.
OriginalL'auteur Jeff Walker
Sauf si vous définissez un type de colonne comme
double precision
dans le fichier DDL, Oracle va le convertir enfloat
type de colonne. Donc, vous devez vous inscrire à double flotteur type de colonne dans le dialecte de la classe.Finalement inscrire
Oracle10gDialectExtended
dans Hibernate/JPA, configurationhibernate.dialect
.OriginalL'auteur David
Si vous utilisez la méthode d'Annotation, vous devez déclarer le type de colonnes comme ci-dessous pour le champ.
OriginalL'auteur Manjunath D R
Nous avons eu le même problème. Nous l'avons résolu en faisant en sorte de définir explicitement le type de colonne dans la cartographie, comme ceci:
OriginalL'auteur K Erlandsson
J'ai eu un cas où mon Oracle type de colonne a été
NUMBER
et le type Java a étédouble
.Enfin tracé qu'il a été jusqu'à paramètres
<property name="hbm2ddl.auto">validate</property>
juste changé la
<property name="hbm2ddl.auto">update</property>
et tout a fonctionné!
OriginalL'auteur Radha Shetty
J'ai eu ce problème lors de la migration d'une jboss 4/hibernate 3 app pour as7/hibernate4. Problème résolu par Rob Keilty la suggestion de modification de hbm2ddl.auto à partir de valider pour mettre à jour sans avoir à modifier le code de legs.
OriginalL'auteur Greg Rushton