2017-10-18 124 views
0

我試圖通過以下方式通過日期,但無法成功。 dateAnswered是存儲日期爲2017-09-13 00:00:00的字段。如何使用Hibernate命名查詢(HQL)在MYSQL的Timestamp字段中搜索當前日期?

誰能告訴我在哪裏得到錯誤:

方法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 

方式二:設置內置參數

@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 

即使在#1的以前的答案我不能夠找到任何相關的解決方案。任何人都可以幫助修復相同的使用命名查詢只?

+0

你在第一個例子中得到什麼錯誤信息? – olegsv

+0

@olegsv沒有收到任何數據.. – Harpreet

回答

0

能夠取得它做如下修改命名查詢和它的工作般的魅力:

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

由於基礎類型爲datetime所以我們需要投射它以使用current_date()

0

您需要指定時間類型。

路1

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

路2

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

感謝看起來非常有前途,但它沒有工作或者作爲默認的bean是@Column(name =「ANTAS_AVSLUTTES」)public Date getDateAnswered(){return dateAnswered; }我不能在這個實體上提到TemporalType,因爲在MYSQL中它是DateTime數據類型。 – Harpreet

+0

無法編輯上面的評論:對不起列名是@Column(name =「DATE_ANASWERED」)在這裏 – Harpreet

+0

好吧我的錯誤TemporalType需要由DateTime數據類型爲TIMESTAMP,所以我更新了我的答案 – Tom

相關問題