2009-06-07 8 views
5

Je reçois le message "littéral ne correspond pas à la chaîne de format".Mappage d'une date Oracle à un objet Java à l'aide de Hibernate

Par exemple, voici quelques méthodes d'une classe Java:

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

Voici le mappage du fichier de configuration Hibernate pour cette classe:

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

et voici le DDL pour que colonne:

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

J'ai essayé de définir type = "date" et "timestamp" (pas en même temps) en tant que attr sur la propriété dans la configuration hibernate, puis en changeant le type Java de String à Date, mais cela m'a donné une erreur différente. J'ai lu quelque chose à propos de la liaison du paramètre mais je ne pouvais pas en faire la tête ou la queue.

Lorsque je commente cette propriété à partir de la configuration, tout le reste fonctionne, donc je suis sûr que c'est mon problème. Ce qui m'ennuie, c'est que j'ai un autre mapping de table/classe avec apparemment le même mapping Oracle Date-> Java String qui ne me pose pas ce problème.

Répondre

8

Il est préférable d'utiliser une classe de date Java.util comme propriété pour refléter la colonne de date Oracle.

Class blah{ 
private Date dateTime; 

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

blah(){} 

} 

Quelle était l'erreur lorsque vous avez utilisé Date comme propriété de classe Java?

+0

Guh. Je ne pense pas que j'ai changé le type du paramètre setter method de String à Date la première fois. Se sentir bête, parce que ça a fonctionné comme sur des roulettes cette fois. –

+2

Cela ne fonctionne que si vous n'incluez PAS l'attribut "type" dans la propriété de mappage: Si vous incluez le type avec la valeur "date" ou "timestamp" "il ne sera pas convertir les valeurs avec précision. Donc, ce qui suit est BAD: Voici un lien expliquant pourquoi cela est vrai: http://fishbowl.pastiche.org/2005/07/13/hibernate_oracle_and_dates_a_story/et voici un lien expliquant la solution: http://www.enavigo.com/2007/10/20/mapping-hibernate-to-oracle-date-fields/ –

2

Le type de votre attribut dateTime doit être Timestamp ou Date, qui devrait convertir automatiquement la date et l'heure Oracle. Je ne vois pas l'intérêt de garder la date sous forme de chaîne car vous devez impliquer le formatage.