JPA Extrahiere Datum vom Timestamp

Samson_Miller

Bekanntes Mitglied
Hallo,

ich habe in meiner MySQL-DB eine Tabelle in der es zwei DATETIME-Felder gibt "start" und "ende". Für die Anbindung der Datenbank an die Applikation nutze ich openjpa-2.4.0.

Ich würde jetzt gerne per Select alle Einträge aus der Tabelle herausbekommen, bei denen das "start"- und "ende"-Datum an dem heutigen Tag ist. In SQL selber ist das nicht schwer:

Code:
SELECT * FROM tabelle WHERE DATE(start) = CURDATE() AND DATE(ende) = CURDATE();

Aber wie kann ich dieses Select in eine NamedQuery unterbringen? die MySQL-Funktion "CURDATE()" kann ich durch "current_date" wohl ersetzen, aber die Fuktion "DATE()" gibt es in JPQL nicht. Ich habe schon hinweise gefunden, die sagen man solle "func(DATE, start)" nutzen, aber auch diesen Befehl gibt es nicht in JPQL.

Gibt es irgendeine Möglichkeit die "DATE()"-Fuktion von MySQL zu nutzen?
Oder gibt es in JPQL die Möglichkeit die Zeit von einem java.util.Date-Feld abzuschneiden?
 

stg

Top Contributor
Wenn du Datenbank-spezifische Funktionen nutzen willst, dann verwende einfach eine NativeQuery. Da muss man sich dann einfach nur im Klaren darüber sein, dass die Lösung nicht mehr ohne weiteres auf andere DBMS portierbar ist.

Ansonsten greife auf die Criteria API zurück, die sollte auch alles bieten, was nötig ist.

Weitere Möglichkeit wäre natürlich auch einfach zu prüfen, ob ein Eintrag zwischen bspw 29.01.2015 00:00:00 und 29.01.2015 23:59:59 liegt. Ähnlich geht das natürlich auch für den Monat oder Jahr oder was auch immer.
 

Centai

Mitglied
Hast Du folgendes versucht:

Code:
SELECT n FROM Tabelle n WHERE n.start > :lastDate AND n.start < :nextDate AND n.ende > :lastDate AND n.ende < :nextDate

Mit folgendem Code:

Java:
Date date = new Date(); 
Calendar cal = Calendar.getInstance(); 
cal.setTime(date); 
cal.set(Calendar.HOUR_OF_DAY, 0); 
cal.set(Calendar.MINUTE, 0); 
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0); 
cal.add(Calendar.DAY_OF_MONTH, -1);
Date lastDate = cal.getTime();
cal.add(Calendar.DAY_OF_MONTH, 2);
Date nextDate = cal.getTime();

Query q = em.createNamedQuery(...);
q.setParameter("nextDate", nextDate);
q.setParameter("lastDate", lastDate);
 

Ähnliche Java Themen

Neue Themen


Oben