Wir haben eine Oracle Date Spalte. Zuerst verwendeten wir in unserer Java / Hibernate-Klasse java.sql.Date
. Dies funktionierte, aber es schien beim Speichern keine Zeitinformationen in der Datenbank zu speichern, daher änderte ich den Java-Datentyp in Timestamp. Jetzt erhalten wir diesen Fehler:
springframework.beans.factory.BeanCreationException: Fehler beim Erstellen einer Bean mit Name 'org.springframework.dao.an notation.PersistenceExceptionTranslationPostProcessor # 0 ' in Klassenpfadressource definiert [Rand-Dienst-Domäne -config.xml]: Initialisierung von Bean fehlgeschlagen; verschachtelte Ausnahme ist org.springframework.beans.factory.BeanCreatio nException: Fehler beim Erstellen einer Bean mit Name 'sessionFactory' in der Klasse definiert Pfad-Ressource [m-service-doma in-config.xml]: Aufruf von init Methode fehlgeschlagen; verschachtelte Ausnahme ist org.hibernate.HibernateException: Falscher Spaltentyp: CREATE_TS, erwartet: Zeitstempel
Irgendwelche Ideen, wie man ein Oracle Date
abbildet, während man den Zeitanteil behält?
Update: Ich kann es zum Laufen bringen, wenn ich den Oracle Timestamp
-Datentyp verwende, aber ich will diese Präzisionsebene nicht ideal. Ich möchte nur das grundlegende Oracle Date
.
Keine direkte Antwort, aber ich würde den Oracle TIMESTAMP-Typ verwenden:
TIMESTAMP (fraktionale_Sekunden_Präzision) Werte für Jahr, Monat und Tag des Datums, sowie Stunde, Minute und zweite Werte der Zeit, wo %Code% gibt optional die Anzahl von an Ziffern im Bruchteil des
%Vor%fractional_seconds_precision
datetime Feld und kann ein sein Nummer im Bereich von 0 bis 9 Der Standardwert ist 6. Sie geben beispielsweise anSECOND
als Literal wie folgt:
mit der gewünschten TIMESTAMP
.
Ich benutze immer java.util.Date mit Oracle Datumsangaben und es behandelt Datum und Uhrzeit gut.
Vielleicht haben Sie Dieses Problem? Stellen Sie sicher, dass Sie den neuesten JDBC-Treiber haben, der Dateiname sollte ojdbc5.jar lauten.
Zunächst einmal - Sie haben recht, dass Sie eine java.sql.Timestamp-Klasse verwenden müssen, da die java.sql.Date-Klasse explizit keine bestimmte Uhrzeit darstellt (sondern eher Mitternacht darstellt) GMT).
Was Ihren Fehler anbelangt - Sie haben nicht genug Informationen angegeben, um mehr zu tun als zu raten (es würde erfordern, dass Sie sowohl Ihre Hibernate-Konfiguration als auch die Klasse betrachten, um die Ursache zu ermitteln). Allerdings , wenn Sie lediglich die Klasse des Feldes in der Java-Klasse geändert haben, müssen Sie natürlich auch das Hibernate-Mapping aktualisieren. Wenn Sie Letzteres nicht getan haben, wird dies wahrscheinlich zu Ihrem Mismatch führen. Versuchen Sie, type="timestamp"
für das entsprechende Mapping explizit anzugeben.
EDIT: Wenn Sie Annotationen verwenden, haben Sie dann die Annotation für diese Eigenschaft auf @Temporal(TemporalType.TIMESTAMP)
aktualisiert? Wenn Sie es nicht getan haben, dann müssen Sie es (und wenn Sie es getan haben, sollten Sie gesagt haben: -)).
Haben Sie die Datenbank neu erstellt, nachdem Sie diese Änderung vorgenommen haben?
Wenn Hibernate die Tabelle ursprünglich mit einem java.sql.Date für die Spalte erstellt hat, bin ich mir nicht bewusst, dass es aufgrund einer Änderung nur des Java-Codes geändert werden kann.
Sie müssen verwenden @Type (type="org.joda.time.contrib.hibernate.PersistentDateTime") für die Spalte, die in der Entitätsklasse
definiert ist