如何使用Hibernate命名查询(HQL)在MYSQL的时间戳字段中搜索当前日期?

如何使用Hibernate命名查询(HQL)在MYSQL的时间戳字段中搜索当前日期?,mysql,hibernate,jpa,named-query,Mysql,Hibernate,Jpa,Named Query,我试着用下面的方法来传递日期,但没有成功。 dateAnswered是存储日期为2017-09-13 00:00:00的字段 谁能告诉我哪里出了错: 方式1:设置参数 @NamedQuery(name = "findAnswar", query = "SELECT a FROM Answar a WHERE (a.dateAnswered = :currentDate )" Try 1: super.em.createNamedQuery( "findAnswar" , Answar .cl

我试着用下面的方法来传递日期,但没有成功。 dateAnswered是存储日期为2017-09-13 00:00:00的字段

谁能告诉我哪里出了错:

方式1:设置参数

@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
方式2:设置内置参数

@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

即使在Stackoverflow之前的回答中,我也找不到任何相关的解决方案。是否有人可以仅使用命名查询来帮助修复相同的问题?

您需要指定时态类型

方式1

方式2


通过对命名查询进行以下更改,可以实现此功能,并且效果良好:

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

因为基础类型是datetime,所以我们需要将其转换为date以使用current_date()

在第一个示例中,您会收到什么错误消息?@olegsv没有收到任何数据。。感谢您看起来非常有希望,但它也不起作用,因为默认bean是@Column(name=“ANTAS_AVSLUTTES”)public date GetDateResponsed(){return DateResponsed;}我不能在这个实体上提到TemporalType,因为在MYSQL中它是DateTime数据类型。无法编辑上述注释:对不起,列名是@column(name=“DATE\u ANASWERED”),这里是我的错误,TemporalType需要是DateTime数据类型的时间戳,所以我更新了我的答案
@Column(name = "DATE_ANASWERED")
@Temporal(TemporalType.TIMESTAMP)
    public Date getDateAnswered () {
    return dateAnswered ;
}
"SELECT a FROM Answar a WHERE cast(a.dateAnswered as date) = current_date()