2012-11-27 18 views
6

Ich brauche eine jpql-Abfrage, um alle LoadFileHistory zu finden, deren finishDate größer als das aktuelle Datum ist (seit 00:00:00). Zum Beispiel größer als 27/11/2012 00:00:00.jpql date comparison today

Ich habe schon diese "Wählen Sie o aus LoadFileHistory o where o.finishDate = CURRENT_DATE" aber bekommt mich nichts.

+1

Wenn Sie diejenigen, die größer sind, warum nicht verwenden Sie '>' anstelle von '='? – Alex

+0

Alex die Idee von put = CURRENT_DATE ist, dass der Vergleich mit dem Datum aber nicht mit der Zeit war. Ich meine, nur 27/11/2012 nicht 27/11/2012 10:15:00 – Manuel

Antwort

19

Sie sollten das heutige Datum auf die Abfrage wie detaillierte bekommen here (java.util.Date hat die Stunde, Minute, Sekunde zu ...)

Das sollten Sie es auf Ihre Frage liefern:

Query q = em.createQuery("select o from LoadFileHistory o where o.finishDate > :today "); 
q.setParameter("today",todaysDateObject,TemporalType.DATE); 
q.getResultList(); 
+4

'CURRENT_DATE' wird auf das aktuelle Datum ausgewertet. Siehe: http://www.objectdb.com/java/jpa/query/jpql/date – Alex

0

Für den Fall, dass Sie nach Time-Level-Filterung mit Datum suchen. Das hat für mich funktioniert.

Date now = DateUtils.addMinutes(new Date(), -15); 
Query q = em.createQuery("Select u From Users u Where u.dateCreated > :today"); 
q.setParameter("today",now,TemporalType.TIMESTAMP); 

DateUtils ist von Apache gemeinsam.

+0

... oder Sie könnten es tun, ohne eine externe Abhängigkeit hinzuzufügen und java.time ... 'Instant.now() zu verwenden. minus (Dauer.von Minutes (15)) ' – Jules