11
votes

Java Date Hibernate Couper le temps

J'ai une colonne Type de date dans Oracle DB et contient la date et l'heure à coup sûr. Mais lorsque j'essaie d'obtenir des données dans l'application Java, la date de retournera avec la bande de zéros au lieu de temps réel. Dans Code, ce sera comme suit:

SQLQuery sqlQuery = session.createSQLQuery("SELECT table.id, table.date FROM table");
List<Object[]> resultArray = sqlQuery.list();
Date date = (Date)resultArray[1];


0 commentaires

9 Réponses :


4
votes

Je ne suis pas un expert avec Oracle, mais vous avez probablement besoin d'un type de colonne DateTime pour obtenir un horodatage.

Avec cela, vous devez utiliser Java.SQL.TMESTAMP JDBC Type.


1 commentaires

Dans Oracle, la date DataType contient des informations de date et heure, beaucoup comme java.lang.date .



0
votes

Essayez ceci:

session.createSQLQuery("SELECT table.id as i, table.date as d FROM table")
  .addScalar("i", Hibernate.LONG)  // Or whatever type id is
  .addScalar("d", Hibernate.TIMESTAMP);


2 commentaires

Merci. Maintenant ça marche. Mais je déteste le fait que je devrais définir des types pour tous les paramètres retournés là-bas. J'ai beaucoup d'entre eux ...


Vous pouvez essayer un dialecte personnalisé. La dialecte de base indique "Register les types d'hibernate d'utilisation par défaut dans la détection automatique de type SQLQUERY SCALAR SQLQUERY".



0
votes

Peut-être que vous avez Ce problème? Assurez-vous d'avoir le dernier pilote JDBC, le nom de fichier doit être OJDBC5.jar.


0 commentaires

3
votes

J'ai eu le même problème (type de date d'oracle dans la base de données).

Le mappage suivant fonctionne pour moi: xxx


0 commentaires

2
votes

J'ai rencontré cette question dans le passé aussi. Pour le résoudre, changez votre cartographie hibernate de: xxx

à xxx

Vous pouvez laisser le type de données dans votre objet hibernate comme java. util.date.


0 commentaires

2
votes

Ouais, il fonctionne aussi bien hibernate 3.3, utilisez OJDBC6.jar et en annotation change la date à l'horodatage comme ci-dessous xxx


0 commentaires

10
votes

Comme d'autres personnes déjà indiquées, vous devez utiliser java.sql.timestamp pour obtenir le temps.

Toutefois, si vous utilisez le @Temporal (temporaltype.timetamp) < / Code> Annotation sur la colonne Date d'Oracle, Hibernate se plaindre et lancera des erreurs de validation de schéma. Pour éviter ceux-ci, ajoutez un colonneDefinition comme ceci: xxx


1 commentaires

Je ne peux pas uplifier cela assez! Cela devrait être la réponse acceptée!



0
votes

J'étais dans le même problème récemment. Voici mon approche ...

Donc, dans ce cas, définissez une pour la boucle dans la classe QueryImplementalation, de telle sorte qu'il vérifie le type de toutes les colonnes de la table de base de données. Si le nom de la colonne est de type DATE, Ajoutez AddScalar ("ColumnName", Nouveau Timestampyptype ()) dans le constructeur de requêtes. De cette manière, les colonnes de type de date afficheront l'horodatage dans l'application Java.

Veuillez trouver le code exemple ci-dessous: xxx

espère que cela aide cela aide.

RAKESH.


0 commentaires

0
votes

Peut-être un peu tard, mais dans mon cas, la solution était de simplement ajouter @Temporal (temporaltype.date) à mon champ de date.

@Type(type = "date")
private Date date;


0 commentaires