Type Java pour date / heure lors de l’utilisation d’Oracle Date avec Hibernate

Nous avons une colonne Date Oracle. Au début, dans notre classe Java / Hibernate, nous java.sql.Date . Cela a fonctionné, mais il ne semblait pas stocker d’informations temporelles dans la firebase database lors de la sauvegarde. J’ai donc remplacé le type de données Java par Timestamp. Maintenant nous avons cette erreur:

springframework.beans.factory.BeanCreationException: erreur lors de la création du bean nommé ‘org.springframework.dao.an notation.PersistenceExceptionTranslationPostProcessor # 0’ défini dans la ressource de chemin de classe [margin-service-domain -config.xml]: échec de l’initialisation du bean; L’exception nestede est org.springframework.beans.factory.BeanCreatio nException: erreur lors de la création du bean avec le nom ‘sessionFactory’ défini dans la ressource de chemin de classe [m-service-doma in-config.xml]: l’appel de la méthode init a échoué; exception nestede est org.hibernate.HibernateException: type de colonne incorrect: CREATE_TS, attendu: horodatage

Des idées sur la façon de mapper une Date Oracle tout en conservant la partie heure?


Mise à jour: Je peux le faire fonctionner si j’utilise le type de données Oracle Timestamp , mais je ne veux pas ce niveau de précision de manière idéale. Je veux juste la date de base Oracle.

Pas une réponse directe mais j’utiliserais le type Oracle TIMESTAMP:

  • TIMESTAMP (fractional_seconds_ precision) Les valeurs d’année, de mois et de jour de la date, ainsi que les valeurs d’heure, de minute et de seconde, où fractional_seconds_precision spécifie éventuellement le nombre de chiffres de la partie décimale du champ de datant SECOND et peut être un nombre La valeur par défaut est 6. Par exemple, vous indiquez TIMESTAMP comme un littéral, comme suit:

     TIMESTAMP'1997-01-31 09:26:50.124' 

avec la fractional_second_precision désirée.

J’utilise toujours java.util.Date avec les dates Oracle et il gère très bien la date et l’heure.

Peut-être que vous avez ce problème? Assurez-vous de disposer du dernier pilote JDBC. Le nom du fichier doit être ojdbc5.jar.

Tout d’abord, vous avez raison de dire qu’il faudrait utiliser une classe java.sql.Timestamp, car la classe java.sql.Date ne représente pas explicitement une heure précise de la journée (elle essaie plutôt de représenter minuit, heure GMT).

En ce qui concerne votre erreur – vous n’avez pas donné assez d’informations pour faire autre chose que de deviner (cela nécessiterait de regarder à la fois votre configuration Hibernate et la classe afin de déterminer réellement la cause). Cependant , si vous avez simplement changé la classe du champ dans la classe Java, vous devrez bien sûr mettre à jour le mappage Hibernate également. Si vous n’avez pas fait le dernier cas, cela entraînera probablement votre inadéquation. Essayez de spécifier explicitement type="timestamp" pour le mappage correspondant.

EDIT: Si vous utilisez des annotations, avez-vous mis à jour l’annotation de cette propriété en @Temporal(TemporalType.TIMESTAMP) ? Si vous ne l’avez pas fait, vous devrez le faire (et si vous l’avez fait, vous auriez dû le dire :-)).

Avez-vous recréé la firebase database après avoir apporté cette modification?

Si Hibernate a initialement créé la table en utilisant un java.sql.Date pour la colonne, je ne suis au courant d’aucune façon qui pourrait le changer en fonction d’une modification apscope au code Java.

Vous devez utiliser @Type (type = “org.joda.time.consortingb.hibernate.PersistentDateTime”) pour la colonne définie dans la classe d’entité