2017-10-18 3 views
0

Ich habe versucht, Datum auf folgendem Weg zu übergeben, aber nicht erfolgreich. dateAnswered ist ein Feld, das das Datum als 2017-09-13 00:00:00 speichert.Wie aktuelles Datum im Timestamp-Feld von MYSQL mit Hibernate Named Query (HQL) suchen?

Kann mir jemand sagen, wo ich falsch bekommen bin:

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: Stellen eingebaute Parameter

@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 

Auch in früheren Antworten von Stackoverflow ich bin nicht in der Lage, eine verwandte Lösung zu finden. Kann jemand helfen, das selbe nur mit Named Query zu beheben?

+0

Welche Fehlermeldungen erhalten Sie im ersten Beispiel? – olegsv

+0

@olegsv Keine Daten empfangen .. – Harpreet

Antwort

0

der Lage, es zu erreichen, tun folgende Änderungen benannte Abfrage und es hat funktioniert wie Charme:

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

Als zugrunde liegende Typ Datetime ist Also müssen wir es so konfigurieren, dass current_date()

verwendet wird
0

Sie müssen den temporalen Typ angeben.

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

Dank sieht sehr vielversprechend, aber es hat nicht funktioniert als Standard-Bean ist @Column (name = "ANTAS_AVSLUTTES") public Date getDateAnswered() {return dateAnswered; } und ich konnte TemporalType für diese Entität nicht angeben, da es in MYSQL DateTime-Datentyp ist. – Harpreet

+0

kann obigen Kommentar nicht bearbeiten: Sorry Spaltenname ist @Column (name = "DATE_ANASERED") hier – Harpreet

+0

ok mein Fehler der TemporalType muss TIMESTAMP von einem DateTime Datentyp sein, so dass ich meine Antwort aktualisiert – Tom