Ich versuche, alle Kunden Datensätze mit HQL in meiner Spring/Hibernate App abzufragen, die Datum zwischen Date1 und Date2 ODER LastSeen zwischen Date1 und Date2 haben, also habe ich diese HQL - Abfrage in der Repository/DAO Klasse:HQL zum Abfragen von Datensätzen zwischen zwei Daten
sessionfactory.getCurrentSession().createQuery("from Customer c where c.dateAdded BETWEEN '"+startDate+"' AND '"+endDate+"' OR c.lastSeenDate BETWEEN '"+startDate+"' AND '"+endDate+"'").list();
ich habe die App ausgetestet die startdate und endDate zu überprüfen und festgestellt, dass sie gesendet werden als:
startdate: Mi 22. Januar 01.16.57 HKT 2014
endDatum: Wed Jan 29 01:16:57 HKT 2014
Im DB, ich bin 100% sicher, dass es einen Datensatz mindestens Sitzung in dieser Abfrage ist, wie dieser Datensatz DateAdded und LastSeen sind wie folgt:
2014-01-23 15:33:38
2014 -01-25 15:33:38
Kann mir bitte jemand sagen, was ich hier falsch mache/vermisse?
Ich bin mir nicht sicher, wie Zeitzonen in HQL gehandhabt werden, wenn Daten als Literale übergeben werden, aber Sie sollten wirklich Abfrageparameter anstelle von String-Verkettung verwenden. – Guillaume
@Guillaume, das speziell oder allgemein gesprochen wird, um dieses Problem anzugehen? – MChan
@Guillaume änderte es in sessionfactory.getCurrentSession(). CreateQuery ("aus Customer c wobei c.dateAdded BETWEEN: startD UND: endD"). SetParameter ("startD", startDate) .setParameter ("endD", startDate) .list(); und immer noch wird es nicht funktionieren :( – MChan