JPA Extrahiere Datum vom Timestamp

Dieses Thema JPA - Extrahiere Datum vom Timestamp im Forum "Data Tier" wurde erstellt von Samson_Miller, 28. Jan. 2015.

Thema: Extrahiere Datum vom Timestamp Hallo, ich habe in meiner MySQL-DB eine Tabelle in der es zwei DATETIME-Felder gibt "start" und "ende". Für die...

  1. 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 (Text):

    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?
     
  2. Vielleicht helfen dir diese Java-Grundlagen weiter --> *Klick*
  3. stg
    stg
    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.
     
  4. Hast Du folgendes versucht:

    Code (Text):
    SELECT n FROM Tabelle n WHERE n.start > :lastDate AND n.start < :nextDate AND n.ende > :lastDate AND n.ende < :nextDate
    Mit folgendem Code:

    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);

     
     
  5. KOSTENLOSES Java-Grundlagen Training im Wert von 39 € Sichere dir hier den kostenlosen Zugriff auf umfangreiches Java-Know How und starte richtig durch!