Java-Typ für Datum / Uhrzeit bei Verwendung von Oracle Date mit Hibernate

8

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 .

    
Marcus Leon 03.02.2010, 00:12
quelle

6 Antworten

7

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    fractional_seconds_precision datetime Feld und kann ein sein   Nummer im Bereich von 0 bis 9   Der Standardwert ist 6. Sie geben beispielsweise an    SECOND als Literal wie folgt:

    %Vor%
  •   

mit der gewünschten TIMESTAMP .

    
Pascal Thivent 03.02.2010, 18:40
quelle
8

Ich benutze immer java.util.Date mit Oracle Datumsangaben und es behandelt Datum und Uhrzeit gut.

    
Brian Deterling 03.02.2010 04:40
quelle
2

Vielleicht haben Sie Dieses Problem? Stellen Sie sicher, dass Sie den neuesten JDBC-Treiber haben, der Dateiname sollte ojdbc5.jar lauten.

    
wallenborn 03.02.2010 15:40
quelle
1

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: -)).

    
Andrzej Doyle 03.02.2010 00:20
quelle
0

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.

    
Drew Wills 03.02.2010 00:19
quelle
0

Sie müssen verwenden @Type (type="org.joda.time.contrib.hibernate.PersistentDateTime") für die Spalte, die in der Entitätsklasse

definiert ist     
sachin farande 06.01.2017 12:44
quelle

Tags und Links