Frage

mit nativen SQL erhalte ich die Datenbank Zeit mit einer Aussage wie:

SELECT CURRENT_TIMESTAMP

mit JPQL ich das gleiche Ergebnis mit:

SELECT CURRENT_TIMESTAMP
FROM Customer c
WHERE c.id=1

Gibt es eine Möglichkeit der letzten beiden Zeilen loswerden?

Danke,

War es hilfreich?

Lösung

Nach dem JSR 220: Enterprise Javabeans 3.0 Spezifikationen:

  

4.6.16 Funktionale Ausdrücke

     

Die Java Persistence Query Language   enthält die folgenden Einbau-   Funktionen, , die in die verwendet werden können,   WHERE oder HAVING-Klausel einer Abfrage .

     

Wenn der Wert eines Arguments ein   funktionelle Expression ist null oder   unbekannt, wird der Wert des Funktions   Ausdruck ist nicht bekannt.

     

[...]

     

4.6.16.3 für Datum und Uhrzeit Funktionen

functions_returning_datetime:=
             CURRENT_DATE |
             CURRENT_TIME |
             CURRENT_TIMESTAMP
     

Die Datetime-Funktionen geben die   Wert der aktuelle Datum, die Uhrzeit und   Zeitstempel auf dem Datenbankserver.

Also ich bin schon überrascht, dass Sie die zweite Form schreiben können, die nicht korrekt pro Spezifikation und könnten somit nicht tragbar sein.

Für mich bin der „richtige“ Weg, dies zu tun wäre, eine Klasse mit einem Datumsfeld vom Typ java.util.Date zu erstellen und es mit einer nativen Abfrage zu füllen. Etwas wie folgt aus:

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class DateItem {
    private Date date;

    /**
     * @return the date
     */
    @Id
    @Column(name = "DATE_VALUE")
    @Temporal(TemporalType.TIMESTAMP)
    public Date getDate() {
        return date;
    }

    /**
     * @param date
     *            the date to set
     */
    public void setDate(Date date) {
        this.date = date;
    }
}

Und dann:

@PersistenceContext
EntityManager em;

/**
 * @return System date on DB server
 */
public Date getSystemDate() {
    Query query = em.createNativeQuery(
            "SELECT CURRENT_TIMESTAMP", DateItem.class);
    DateItem dateItem = (DateItem) query.getSingleResult();
    return dateItem.getDate();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top