2010-10-25 22 views
2

J'ai une colonne d'horodatage tradée dans l'une des tables DB (Oracle). J'utilise hibernate comme couche de persistance pour récupérer et stocker des données dans la base de données. J'ai une exigence dans laquelle j'ai besoin d'interroger la base de données sur la date. i.e Depuis l'interface utilisateur, l'utilisateur transmet une date et je dois obtenir les données filtrées en fonction de cette date.Hibernate Requête d'extraction d'enregistrements à la date ignorant l'horodatage

Si la colonne tradedate contient uniquement la partie date, ma requête renvoie les enregistrements corrects Le problème survient lorsque la colonne tradedate est remplie avec une valeur d'horodatage, c'est-à-dire (date + heure). Ces valeurs ne sont ensuite pas renvoyées par la requête.

par exemple: dire il y a 10 dossiers pour le 23 octobre 2010 dans DB 5 d'entre eux ont les entrées d'horodatage et 5 DonT

Ainsi, la requête que j'ai seulement les déclarations me 5 lignes qui n'avez pas l'horodatage.

Maintenant, je sais que je dois extraire la date de l'horodatage, puis faire la comparaison pour que je reçois tous les enregistrements pour ce jour aprticular mais je ne sais pas comment le faire avec Hibernate et en utilisant HQL

la requête dans Java/Hibernate que j'utilise est la suivante

Chaîne hql = "sélectionnez Effacer de POJO comme POJO où POJO.tradeDate =: date"; Requête query = getSession(). CreateQuery (hql); query.setParameter ("date", date);

+0

Cela peut aider - http://stackoverflow.com/questions/980366/using-hql-to-query-on-a -date-while-ignoring-the-time-on-oracle – William

Répondre

9
String hql = "from POJO as POJO where to_date(to_char(POJO.tradeDate, 'DD-MON-YY'), 'DD-MON-YY') = :date"; 
Query query = getSession().createQuery(hql); 
query.setParameter("date", date); 

[Modifier]

Prenez garde, l'index, s'il y en a, sur tradeDate ne sera pas utilisé si vous suivez la requête ci-dessus. Dans le cas, il y a des problèmes de performances, vous pouvez plutôt le faire comme ça,

String hql = "from POJO as POJO where POJO.tradeDate between :date and :ceilDate"; 
Query query = getSession().createQuery(hql); 
// a date having timestamp part, 00:00:00.0, or missing completely 
query.setParameter("date", date); 
// a date having timestamp part, 23:59:59.999 
query.setParameter("ceilDate", ceilDate); 
+0

Merci beaucoup Adeel !! Cela m'a aidé à résoudre le problème – Arun