Java de type date/heure lors de l'utilisation d'Oracle Date avec Hibernate
Nous avons un Oracle colonne Date. Au premier abord, notre Java/Hibernate classe, nous avons été à l'aide de java.sql.Date
. Cela a fonctionné mais il ne semble pas pour stocker tout moment des informations dans la base de données lorsque nous sauver alors j'ai changé le Java type de données Timestamp. Maintenant nous obtenir cette erreur:
springframework.les haricots.usine.BeanCreationException:
Erreur lors de la création de haricots avec le nom
'org.springframework.dao.un
la notation.PersistenceExceptionTranslationPostprocessor#0'
défini dans le chemin de classe de ressource
[marge-service-domaine
-config.xml]: Initialisation du bean n'a pas; nested exception est
org.springframework.les haricots.usine.BeanCreatio
nException: Erreur lors de la création de haricot avec
nom de "sessionFactory" défini dans la classe
chemin de ressources [m-service-doma
en config.xml]: Invocation de l'init
la méthode a échoué; nested exception est
org.mise en veille prolongée.HibernateException:
Mauvais type de colonne: CREATE_TS,
prévu: timestamp
Toutes les idées sur la façon de mapper un Oracle Date
tout en conservant la partie heure?
Mise à jour: je peux le faire fonctionner, si j'utilise l'Oracle Timestamp
type de données mais je ne veux pas de ce niveau de précision dans l'idéal. Veux juste la base Oracle Date
.
Ne sais pas ce que c'est - je devine donc pas.
Si c'est l'hibernation automatiquement générer le schéma de la fonctionnalité, alors non.
OriginalL'auteur Marcus Leon | 2010-02-03
Vous devez vous connecter pour publier un commentaire.
Pas une réponse directe, mais je préfère utiliser l'Oracle d'HORODATAGE type:
avec les
fractional_second_precision
.Date
mais cela fonctionne bien.C'est juste une façon de contourner. Voir mon commentaire sur Brian de réponse quant à pourquoi sa réponse est la solution à votre question initiale.
Quand je fais cela, hibernate cartes de la colonne (maintenant type timestamp) à une Chaîne au lieu d'une Date en Java. Des idées pourquoi?
OriginalL'auteur Pascal Thivent
J'ai toujours utiliser java.util.Date avec Oracle dates et gère date et l'heure de l'amende juste.
Je ne recommanderais pas cela. Lors de l'utilisation de java.util.Date, Hibernate cartes de ses TimestampType. Oracle pourrait ensuite moulé à la DATE de la colonne d'HORODATAGE donc un index existant ne sera pas utilisé, et les performances s'en être vraiment mauvais. Mieux utiliser un timestamp tout le chemin à travers.
OriginalL'auteur Brian Deterling
Peut-être que vous avez ce problème? assurez-vous d'avoir le dernier pilote JDBC, le nom de fichier doit être ojdbc5.jar.
OriginalL'auteur wallenborn
Tout d'abord - vous avez raison, vous auriez besoin d'utiliser java.sql.Horodatage de la classe, comme le java.sql.Classe Date explicitement ne représente pas une période de la journée (plutôt, il essaie de représenter minuit GMT).
Que votre erreur - vous n'avez pas donné assez d'informations pour faire quelque chose de plus que de deviner (elle aurait besoin de regarder votre Hibernate config et la classe de déterminer la cause). Cependant, si vous avez simplement changé de la classe du champ dans la classe de Java, alors bien sûr vous aurez à mettre à jour le mappage Hibernate. Si vous n'avez pas fait le dernier alors ce sera probablement plomb à votre problème. Essayez de spécifier explicitement
type="timestamp"
pour la cartographie.EDIT: Si vous utilisez des annotations, puis avez-vous mise à jour de l'annotation sur la propriété à
@Temporal(TemporalType.TIMESTAMP)
? Si vous n'avez pas, alors vous aurez besoin de (et si vous l'avez fait, vous devriez avoir dit alors :-)).Essayé, même erreur. Vous vous demandez si c'est un "Printemps". L'erreur fait référence à un Printemps bean...
OriginalL'auteur Andrzej Doyle
Avez-vous recréer la base de données après avoir fait ce changement?
Si Hibernate créé à l'origine de la table à l'aide de java.sql.Date de la colonne, je ne suis pas au courant de toute manière, il pourrait changer sur la base d'un changement dans le code Java seul.
OriginalL'auteur Drew Wills
Vous devez utiliser
@Type(type = "org.joda.temps.contrib.mise en veille prolongée.PersistentDateTime")
pour la colonne définie dans la classe d'entité
OriginalL'auteur sachin farande