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
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
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
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.
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.
Registrieren Sie schließlich Oracle10gDialectExtended
in der Hibernate / JPA-Konfiguration als hibernate.dialect
.
Wenn Sie die Annotationsmethode verwenden, müssen Sie den Spaltentyp wie folgt für das Feld deklarieren.
%Vor%Wir hatten das gleiche Problem. Wir haben es gelöst, indem wir sicher gestellt haben, dass wir den Spaltentyp explizit im Mapping setzen:
%Vor% 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!
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
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.
Registrieren Sie schließlich %code% in der Hibernate / JPA-Konfiguration als %code% .
Wenn Sie die Annotationsmethode verwenden, müssen Sie den Spaltentyp wie folgt für das Feld deklarieren.
%Vor%Wir hatten das gleiche Problem. Wir haben es gelöst, indem wir sicher gestellt haben, dass wir den Spaltentyp explizit im Mapping setzen:
%Vor%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!
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.
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.
Tags und Links hibernate grails validation database-schema