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

标签 mysql hibernate jpa named-query

我尝试使用以下方式传递日期但未能成功。 dateAnswered 是将日期存储为 2017-09-13 00:00:00 的字段。

谁能告诉我哪里错了:

方式一:设置参数

@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

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

最佳答案

能够通过对命名查询进行以下更改来实现它并且它像魅力一样工作:

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

由于底层类型是日期时间,所以我们需要将其转换为日期以使用 current_date()

关于mysql - 如何使用 Hibernate 命名查询 (HQL) 在 MYSQL 的时间戳字段中搜索当前日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46807451/

相关文章:

oracle - 如何迭代 JPA 查询结果而不将它们全部保留在内存中?

mysql - 存储过程使用比预期更多的内存

java - 复制数据库 JPA

java - 使用这种方法会遇到线程安全问题吗?

java - 将 Hibernate 3.5.x 添加到 Maven pom.xml 构建

spring - 带有@Audited 的基本模型

java - Cascade.DELETE_ORPHAN 和父/子关系的 Hibernate "deleted entity passed to persist"问题

mysql - C 树数据库中出现错误

php - 在哪里转义字符串来防止mysql注入(inject)?

java - 连接数据库时出现 SQL 异常