如何使用Hibernate命名查询(HQL)在MYSQL的Timestamp字段中搜索当前日期?
我试图通过以下方式通过日期,但无法成功。 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的以前的答案我不能够找到任何相关的解决方案。任何人都可以帮助修复相同的使用命名查询只?
能够取得它做如下修改命名查询和它的工作般的魅力:
"SELECT a FROM Answar a WHERE cast(a.dateAnswered as date) = current_date()
由于基础类型为datetime所以我们需要投射它以使用current_date()
您需要指定时间类型。
路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 ;
}
感谢看起来非常有前途,但它没有工作或者作为默认的bean是@Column(name =“ANTAS_AVSLUTTES”)public Date getDateAnswered(){return dateAnswered; }我不能在这个实体上提到TemporalType,因为在MYSQL中它是DateTime数据类型。 – Harpreet
无法编辑上面的评论:对不起列名是@Column(name =“DATE_ANASWERED”)在这里 – Harpreet
好吧我的错误TemporalType需要由DateTime数据类型为TIMESTAMP,所以我更新了我的答案 – Tom
你在第一个例子中得到什么错误信息? – olegsv
@olegsv没有收到任何数据.. – Harpreet