2017-10-18 3 views
0

J'ai essayé de passer la date en utilisant la méthode suivante mais incapable de réussir. dateAnswered est un champ qui stocke la date comme 2017-09-13 00:00:00.Comment rechercher la date actuelle dans le champ Horodatage de MYSQL en utilisant Hibernate Named Query (HQL)?

Quelqu'un peut-il dire où je reçois mal:

Way 1: SetParameter

@NamedQuery(name = "findAnswar", query = "SELECT a FROM Answar a WHERE (a.dateAnswered = :currentDate)" 

Try 1: 
super.em.createNamedQuery("findAnswar" , Answar .class).setParameter("currentDate", new Date()); //Not receive any data 

Try 2: 
Date date = new Date(); 
date.setHours(0); 
date.setMinutes(0); 
date.setSeconds(0); 
super.em.createNamedQuery("findAnswar" , Answar .class).setParameter("currentDate", date) //Not receive any data 

Way 2: Définir les paramètres encastrables

@NamedQuery(name = "findAnswar", query = "SELECT a FROM Answar a WHERE (a.dateAnswered = current_date())") //NOT WORKS 

It works if i do add Temporal to getter: 

@Column(name = "DATE_ANASWERED") 
@Temporal(TemporalType.DATE) 
public Date getDateAnswered() { 
    return dateAnswered ; 
} 

BUT IT GIVES another issue : Caused by: org.hibernate.HibernateException: Wrong column type in db.ANSWAR for column DATE_ANASWERED. Found: datetime, expected: date 

@NamedQuery(name = "findAnswar", query = "SELECT a FROM Answar a WHERE (a.dateAnswered = current_date)") //NOT WORKS - JPA errors 

Même dans les réponses précédentes de Stackoverflow je ne suis pas capable de trouver toute solution connexe. Quelqu'un peut-il aider à corriger la même chose en utilisant seulement Named Query?

+0

Quels messages d'erreur obtenez-vous dans le premier exemple? – olegsv

+0

@olegsv Pas de réception de données .. – Harpreet

Répondre

0

Capable de réaliser faire des changements suivants à la requête nommée et cela a fonctionné comme un charme:

"SELECT a FROM Answar a WHERE cast(a.dateAnswered as date) = current_date() 

Comme type sous-jacent est datetime donc nous avons besoin de le convertir à ce jour pour utiliser current_date()

0

Vous devez spécifier le type temporel.

Way 1

super.em.createNamedQuery("findAnswar", Answar.class) 
    .setParameter("currentDate", new Date(), TemporalType.TIMESTAMP); 

Way 2

@Column(name = "DATE_ANASWERED") 
@Temporal(TemporalType.TIMESTAMP) 
    public Date getDateAnswered() { 
    return dateAnswered ; 
} 
+0

Merci d'avoir l'air très prometteur mais cela n'a pas fonctionné non plus comme bean par défaut est @Column (name = "ANTAS_AVSLUTTES") public Date getDateAnswered() {return dateAnswered; } et je ne pourrais pas mentionner TemporalType sur cette entité parce que dans MYSQL il s'agit du datatype DateTime. – Harpreet

+0

impossible d'éditer commentaire ci-dessus: nom de colonne Désolé est @Column (name = "DATE_ANASWERED") ici – Harpreet

+0

ok mon erreur le TemporalType doit être TIMESTAMP par un datatype DateTime donc j'ai mis à jour ma réponse – Tom