Question

avec SQL natif je reçois le temps de base de données avec une déclaration comme:

SELECT CURRENT_TIMESTAMP

avec JPQL je reçois le même résultat avec:

SELECT CURRENT_TIMESTAMP
FROM Customer c
WHERE c.id=1

Yat-il un moyen de se débarrasser des deux dernières lignes?

merci,

Était-ce utile?

La solution

Selon le JSR 220: Enterprise JavaBeans 3.0 spécifications:

  

4.6.16 Expressions fonctionnelles

     

Le langage de requête Java Persistence   comprend les haut-suite   fonctions, qui peuvent être utilisés dans le   Clause where ou having d'une requête .

     

Si la valeur d'un argument à une   l'expression fonctionnelle est nulle ou   inconnue, la valeur de la fonction   l'expression est inconnue.

     

[...]

     

4.6.16.3 Fonctions Datetime

functions_returning_datetime:=
             CURRENT_DATE |
             CURRENT_TIME |
             CURRENT_TIMESTAMP
     

Les fonctions datetime renvoient le   valeur de date, l'heure et   horodatage sur le serveur de base de données.

Je suis déjà surpris que vous pouvez écrire la 2ème forme qui ne sont pas correctes par spécification et pourrait donc pas être portable.

Pour moi, le « droit » façon de le faire serait de créer une classe avec un champ de date de type java.util.Date et de le remplir avec une requête native. Quelque chose comme ça:

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

Et puis:

@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();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top