2009-06-07 9 views
5

Viene visualizzato il messaggio "letterale non corrisponde alla stringa di formato".Associazione di una data Oracle a un oggetto Java utilizzando Hibernate

Per esempio, qui ci sono alcuni metodi di una classe Java:

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

Ecco la mappatura dal file di configurazione di Hibernate per la classe:

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

ed ecco il DDL per quella colonna:

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

Ho provato a impostare type = "date" e "timestamp" (non allo stesso tempo) come attr sulla proprietà nella configurazione di ibernazione, e quindi cambiando il tipo di Java da String a Date, ma questo mi ha dato un errore diverso. Ho letto qualcosa sull'associazione del parametro, ma non sono riuscito a farmi testa o croce.

Quando commento la proprietà dalla configurazione, tutto il resto funziona, quindi sono sicuro che questo è il mio problema. La cosa fastidiosa è che ho un'altra mappatura tabella/classe con apparentemente la stessa mappatura Oracle Date-> Java String che non mi dà questo problema.

risposta

8

È preferibile utilizzare una classe data Java.util come proprietà per riflettere la colonna della data dell'oracolo.

Class blah{ 
private Date dateTime; 

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

blah(){} 

} 

Qual è stato l'errore quando si è utilizzato Date come proprietà della classe Java?

+0

Guh. Non penso di aver modificato il tipo del parametro del metodo setter da String a Date la prima volta. Sensazione stupida, perché ha funzionato come un orologio questa volta. –

+2

Funziona solo se NON si include l'attributo "type" nella proprietà mapping: Se si include il tipo con un valore "data" o "data/ora" "non convertirà accuratamente i valori. Quindi il seguente è BAD: Ecco un link che spiega perché questo è vero: http://fishbowl.pastiche.org/2005/07/13/hibernate_oracle_and_dates_a_story/ed ecco un link che spiega la soluzione: http://www.enavigo.com/2007/10/20/mapping-hibernate-to-oracle-date-fields/ –

2

Il tipo di attributo dateTime deve essere Timestamp o Data, che dovrebbe convertire automaticamente data/ora Oracle su di esso. Non vedo il punto di mantenere la data come una stringa poiché devi coinvolgere la formattazione.