Domanda

con SQL nativo ho tempo database con una dichiarazione come:

SELECT CURRENT_TIMESTAMP

con JPQL ottengo lo stesso risultato con:

SELECT CURRENT_TIMESTAMP
FROM Customer c
WHERE c.id=1

C'è un modo per sbarazzarsi delle ultime due righe?

grazie,

È stato utile?

Soluzione

Secondo il JSR 220: Enterprise JavaBeans 3.0 specifiche:

  

4.6.16 Espressioni funzionali

     

Il linguaggio di query Java Persistence   comprende la seguente incorporato   funzioni, che possono essere utilizzati nella   WHERE o HAVING di una query .

     

Se il valore di qualsiasi argomento per un   espressione funzionale è nullo o   sconosciuto, il valore del funzionale   espressione è sconosciuta.

     

[...]

     

4.6.16.3 Funzioni Datetime

functions_returning_datetime:=
             CURRENT_DATE |
             CURRENT_TIME |
             CURRENT_TIMESTAMP
     

Le funzioni restituiscono il datetime   valore della corrente data, ora, e   timestamp sul server di database.

Così sto già sorpreso è possibile scrivere il 2 ° modulo che non è corretta secondo la specifica e potrebbe quindi non essere portabile.

Per me, il modo "giusto" per farlo sarebbe quello di creare una classe con un campo data di tipo java.util.Date e popolarlo con una query nativo. Qualcosa del genere:

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

E poi:

@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();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top