Hibernate: Gefunden: float, expected: double precision

8

Ich habe ein Problem mit der Zuordnung von Oracle Float Double Precision Datentyp zu Java Double Datentyp. Der Hibernate-Schema-Validator scheint fehlzuschlagen, wenn der Java Double-Datentyp verwendet wird.

%Vor%

Die einzige Möglichkeit, dies zu vermeiden, besteht darin, die Schemaüberprüfung zu deaktivieren und zu hoffen, dass das Schema mit der Ausführung der Anwendung synchronisiert ist. Es muss repariert werden, bevor es in Produktion geht.

Umgebung der App:
- Grails 1.2.1
- Hibernate-Core 3.3.1.GA
- Oracle 10g

    
Frederic Morin 26.03.2010, 16:36
quelle

6 Antworten

4

Benötige weitere Informationen. Der Tisch ist doppelt? Ich kenne Oracle nicht, aber ist das ein Gleitkommatyp? Mit welchem java.sql.Types -Typ wird übersetzt? Sie können die Zuordnung von java.sql.Types zu Datenbanktyp in der Dialektklasse für Ihre Datenbank sehen. In diesem Fall ist es org.hibernate.dialect.Oracle10gDialect (was 9i und 8i erweitert). Sieht so aus, als hättest du

%Vor%

Also muss die Tabelle als double precision definiert werden, und die Java-Klasse muss als etwas definiert werden, das auf Types.Double , normalerweise double , abgebildet wird.

Aus der Fehlermeldung sieht es so aus, als wäre Ihre Tabelle als float definiert, die diese Zuordnung verwenden würde

%Vor%

für den der erwartete Java-Typ etwas wäre, das auf Types.FLOAT , normalerweise float ; ein einzelner Genauigkeitswert.

Am einfachsten ist es, die Tabelle oder die Java-Klasse entsprechend anzupassen. Alternativ können Sie einen Benutzertyp angeben, der einen Wert mit einfacher Genauigkeit einem Wert mit doppelter Genauigkeit zuordnet. Ich kann mir nicht vorstellen, warum du das wirklich tun würdest, aber vielleicht, wenn du nicht die Kontrolle über die Klasse und den Tisch hättest, was ziemlich selten ist, würde ich denken.

hth.

    
Jeff Walker 26.03.2010, 16:51
quelle
7

Wenn Sie in der DDL-Datei keinen Spaltentyp als double precision definieren, konvertiert Oracle ihn in den Spaltentyp float . Also müssen Sie Double als Float-Spalte Typ in Dialekt-Klasse registrieren.

%Vor%

Registrieren Sie schließlich Oracle10gDialectExtended in der Hibernate / JPA-Konfiguration als hibernate.dialect .

    
David 07.11.2012 14:48
quelle
3

Wenn Sie die Annotationsmethode verwenden, müssen Sie den Spaltentyp wie folgt für das Feld deklarieren.

%Vor%     
Manjunath D R 14.07.2015 13:43
quelle
1

Wir hatten das gleiche Problem. Wir haben es gelöst, indem wir sicher gestellt haben, dass wir den Spaltentyp explizit im Mapping setzen:

%Vor%     
K Erlandsson 18.08.2010 12:39
quelle
0

Ich hatte einen Fall, in dem mein Oracle-Spaltentyp NUMBER und der Java-Typ double war.

Schließlich verfolgt, dass es auf Einstellungen

ging

<property name="hbm2ddl.auto">validate</property>

hat es nur in

geändert

<property name="hbm2ddl.auto">update</property>

und alles hat funktioniert!

    
Radha Shetty 26.06.2012 17:30
quelle
0
___ qstntxt ___

Ich habe ein Problem mit der Zuordnung von Oracle Float Double Precision Datentyp zu Java Double Datentyp. Der Hibernate-Schema-Validator scheint fehlzuschlagen, wenn der Java Double-Datentyp verwendet wird.

%Vor%

Die einzige Möglichkeit, dies zu vermeiden, besteht darin, die Schemaüberprüfung zu deaktivieren und zu hoffen, dass das Schema mit der Ausführung der Anwendung synchronisiert ist. Es muss repariert werden, bevor es in Produktion geht.

Umgebung der App:
- Grails 1.2.1
- Hibernate-Core 3.3.1.GA
- Oracle 10g

    
___ answer13272074 ___

Wenn Sie in der DDL-Datei keinen Spaltentyp als %code% definieren, konvertiert Oracle ihn in den Spaltentyp %code% . Also müssen Sie Double als Float-Spalte Typ in Dialekt-Klasse registrieren.

%Vor%

Registrieren Sie schließlich %code% in der Hibernate / JPA-Konfiguration als %code% .

    
___ answer31408440 ___

Wenn Sie die Annotationsmethode verwenden, müssen Sie den Spaltentyp wie folgt für das Feld deklarieren.

%Vor%     
___ qstnhdr ___ Hibernate: Gefunden: float, expected: double precision ___ answer3512142 ___

Wir hatten das gleiche Problem. Wir haben es gelöst, indem wir sicher gestellt haben, dass wir den Spaltentyp explizit im Mapping setzen:

%Vor%     
___ answer11212849 ___

Ich hatte einen Fall, in dem mein Oracle-Spaltentyp %code% und der Java-Typ %code% war.

Schließlich verfolgt, dass es auf Einstellungen

ging

%code%

hat es nur in

geändert

%code%

und alles hat funktioniert!

    
___ tag123validation ___ Bei der Datenvalidierung wird sichergestellt, dass ein Programm mit sauberen, korrekten und nützlichen Daten arbeitet. ___ tag123hibernate ___ Hibernate ist eine ORM-Bibliothek (Object-Relational Mapping) für die Sprache Java, die es Entwicklern ermöglicht, POJO-artige Domänenmodelle in ihren Anwendungen zu verwenden, die weit über das Object / Relational Mapping hinausgehen. ___ tag123databaseschema ___ Eine Beschreibung der Struktur der Datenbank - einschließlich der Struktur der Tabellen, Spalten, Constraints, Sichten usw., die die Datenbank bilden.Normalerweise im Text definiert, in der Regel SQL in einem RDBMS, der Schema beschreibt den vollständigen Blueprint für die Datenbank und definiert alles über die Datenbank mit Ausnahme der Daten selbst. ___ tag123grails ___ Grails ist ein Open-Source-Framework für Web-Anwendungen, das die Groovy-Programmiersprache verwendet, die wiederum auf der Java Virtual Machine (JVM) und Java basiert das "Kodieren nach Konvention" und verwendet gängige Java-Technologien wie Hibernate und Spring. ___ answer18304381 ​​___

Ich hatte dieses Problem, als ich eine jboss 4 / hibernate 3 App nach as7 / hibernate4 migrierte. Das Problem wurde von Rob Keilyys Vorschlag gelöst, hbm2ddl.auto von validate auf update umzustellen, ohne den alten Code ändern zu müssen.

    
___ answer2525079 ___

Benötige weitere Informationen. Der Tisch ist doppelt? Ich kenne Oracle nicht, aber ist das ein Gleitkommatyp? Mit welchem %code% -Typ wird übersetzt? Sie können die Zuordnung von %code% zu Datenbanktyp in der Dialektklasse für Ihre Datenbank sehen. In diesem Fall ist es %code% (was 9i und 8i erweitert). Sieht so aus, als hättest du

%Vor%

Also muss die Tabelle als %code% definiert werden, und die Java-Klasse muss als etwas definiert werden, das auf %code% , normalerweise %code% , abgebildet wird.

Aus der Fehlermeldung sieht es so aus, als wäre Ihre Tabelle als %code% definiert, die diese Zuordnung verwenden würde

%Vor%

für den der erwartete Java-Typ etwas wäre, das auf %code% , normalerweise %code% ; ein einzelner Genauigkeitswert.

Am einfachsten ist es, die Tabelle oder die Java-Klasse entsprechend anzupassen. Alternativ können Sie einen Benutzertyp angeben, der einen Wert mit einfacher Genauigkeit einem Wert mit doppelter Genauigkeit zuordnet. Ich kann mir nicht vorstellen, warum du das wirklich tun würdest, aber vielleicht, wenn du nicht die Kontrolle über die Klasse und den Tisch hättest, was ziemlich selten ist, würde ich denken.

hth.

    
___
Greg Rushton 18.08.2013 22:46
quelle