2009-06-07 14 views
5

Ich bekomme die Nachricht "Literal passt nicht Formatzeichenfolge".Mapping eines Oracle-Datums auf ein Java-Objekt mit Hibernate

Zum Beispiel sind hier einige Methoden aus einer Java-Klasse:

public String getDateTime(); 
public void setDateTime(String date_time); 

Hier wird die Abbildung von der Hibernate-Konfigurationsdatei für diese Klasse:

<property name="dateTime" column="date_time"> 

und hier wird die DDL für die Säule:

CREATE TABLE "SCHEMA"."TABLE_NAME" 
    ( 
    "DATE_TIME" DATE, 
    etc. 
    ) 

ich versuchte Typen Einstellung = „Datum“ und „Zeitstempel“ (nicht zur gleichen Zeit) als Attr auf der Eigenschaft in der Hibernate-Konfiguration, und dann den Java-Typ von String in Datum ändern, aber das gab mir einen anderen Fehler. Ich habe etwas über das Binden des Parameters gelesen, konnte aber davon nichts machen.

Wenn ich diese Eigenschaft aus der Config auskommen alles andere funktioniert, so bin ich mir sicher, dass das mein Problem ist. Die ärgerliche Sache ist, dass ich eine andere Tabelle/Klassenzuordnung mit scheinbar der gleichen Oracle Date-> Java String Mapping habe, die mir dieses Problem nicht gibt.

Antwort

8

Sie sollten eine Java.util-Datenklasse als Eigenschaft verwenden, die die Orakeldatumsspalte widerspiegelt.

Class blah{ 
private Date dateTime; 

public Date getDateTime(); 
public void setDateTime(Date dateTime); 

blah(){} 

} 

Was war der Fehler, wenn Sie Datum als die Java-Klasse-Eigenschaft verwendet?

+0

Guh. Ich glaube nicht, dass ich den Typ des Setter-Methodenparameters beim ersten Mal von String auf Date geändert habe. Es war dumm, weil es dieses Mal wie ein Uhrwerk funktionierte. –

+2

Dies funktioniert nur, wenn Sie das Attribut "type" in der Mapping-Eigenschaft nicht enthalten: Wenn Sie den Typ mit einem Wert von "Datum" oder "Zeitstempel "Es wird die Werte nicht genau konvertieren. Also ist das folgende BAD: Hier ist ein Link, der erklärt, warum das wahr ist: http://fishbowl.pastiche.org/2005/07/13/hibernate_oracle_and_dates_a_story/und hier ist ein Link, der die Lösung erklärt: http://www.enavigo.com/2007/10/20/mapping-hibernate-to-oracle-date-fields/ –

2

Der Typ Ihres dateTime-Attributs sollte Timestamp oder Date sein, das Oracle Datum/Uhrzeit automatisch in es konvertieren soll. Ich sehe keinen Sinn darin, das Datum als String zu behalten, da Sie die Formatierung einbeziehen müssen.