J'ai un problème avec la cartographie du type de données Double précision Oracle Float à Java Double DataType. Le validateur de schéma Hibernate semble échouer lorsque le double type de données Java est utilisé.
org.hibernate.HibernateException: Wrong column type in DB.TABLE for column amount. Found: float, expected: double precision
8 Réponses :
Besoin de plus d'informations. La table est double? Je ne connais pas l'oracle, mais est-ce un type de point flottant? Qu'est-ce que donc, la table doit être définie comme à partir du message d'erreur, il semble que votre table est définie comme pour laquelle le type Java attendu serait quelque chose qui correspond à La chose la plus facile à faire est de changer votre table ou votre classe Java. Alternativement, vous pouvez spécifier un type d'utilisateur qui ferait mapper une valeur de précision unique sur une valeur de précision à double précision; Je ne peux pas penser à la raison pour laquelle vous voudriez vraiment faire cela, mais peut-être que si vous n'aviez pas de contrôle sur la classe et la table, ce qui est assez rare, je penserais. P> htH. p> p> java.sql.types code> est-il traduit? Vous pouvez voir le
java.sql.types code> à la mappage de type de base de données dans la classe de dialecte pour votre base de données. Dans ce cas, il est
org.hibernate.dialect.oracle10gdialect code> (qui s'étend 9i et 8i). On dirait que vous avez
double précision code> et que la classe Java doit être définie comme quelque chose qui fera mapper vers
Types.double code>, généralement
double code>. P>
float code> qui utiliserait cette mappage p>
types.float code>, généralement
float code>; Une valeur de précision unique. P>
Nous avions le même problème. Nous avons résolu en veillant à définir explicitement le type de colonne dans le mappage, comme celui-ci:
<property name="performance" type="double"> <column name="PERFORMANCE" sql-type="float" /> </property>
J'ai eu un cas où mon type de colonne Oracle était a finalement tracé qu'il s'agissait de réglages p>
juste changé en p>
Et tout a fonctionné! P> numéro code> et le type Java était
double code>. p>
sauf si vous définissez un type de colonne comme Enfin, enregistrez-vous double précision code> dans ddl, l'oracle le convertira en
float code> type de colonne. Vous devez donc vous inscrire à double chose en tant que type de colonne de flotteur dans la classe dialecte.
oracle10gdialectextended code> dans hibernate / jpa configuration comme
hibernate.dialect code>. p> p>
Il n'a pas été travaillé en ajoutant la classe Oracle10gdialectextenseTextenseD dans hibernate.cfg.xml Fichier:
J'ai eu cette question lors de la migration d'une application JBoss 4 / hibernate 3 sur AS7 / Hibernate4. Problème résolu par la suggestion de Rob Keilty de modifier HBM2DDL.Auto de Valider à la mise à jour sans avoir à modifier le code hérité. P>
Si vous utilisez la méthode d'annotation, vous devez déclarer type de colonne comme ci-dessous pour le champ.
Application.Properties P>
hibernate.dialect = com.test.config.oracle10gdialectextext code> p>
Créer une classe p> blockQuote>
xxx pré> blockquote>
Après de nombreuses recherches et essais, j'ai trouvé la solution. Pour le domaine GRAVES, nous pouvons résoudre ce problème en ajoutant le in de sorte qu'il supprimera l'erreur en mode de validation. P> P> résultat.Groovy code> p>
Pourriez-vous montrer comment vous mappez cette colonne? BTW En notant que vous êtes dans les dernières minutes avant de vous rendre à la production, vous vous assurez simplement d'obtenir des remarques Witty sur votre négligence de tester votre application en temps voulu :-)
Haha :) Ne t'inquiète pas, je ne suis pas négligé quand il s'agit de produire de la production. Cela ne va pas aussi longtemps qu'il n'est pas corrigé. Quoi qu'il en soit, c'est un bug que l'un de mes collègues encloutered et j'essaie simplement de l'aider. Belle remarque cependant :)
J'ai édité ma question selon votre suggestion. THX.
J'ai bien peur que vous vous dirigiez mal ici. Oracle SQL ne fait pas de type de données comme double ou float. Le seul numéro de données numérique autorisé pour la colonne est le numéro
code>. Vous pouvez appeler des procédures PL / SQL avec des paramètres de type Binarin_Double, mais c'est quelque chose de différent, ce type de données ne peut pas être stocké dans la base de données. Si vous souhaitez être en sécurité, cartographiez le numéro d'Oracle (comme ses sous-types) à BigDecimal de Java.