我有一个使用hibernate(annotations)/ mysql组合的应用程序用于ORM。在该应用程序中,我得到了一个带有Date字段的实体。我正在寻找一种在一个时间范围内选择该日期的方法(所以hh:mm:没有日期部分的ss)。
在MySQL中有一个函数TIME(表达式),它可以提取时间部分并在where子句中使用它,但是在没有切换到本机查询的情况下,这似乎在Hibernate中不可用。 hibernate中是否有选项可以执行此操作,还是应该在java中循环结果并在那里进行比较?这会像MySQL解决方案那样慢得多,因为它不会使用索引吗?
答案 0 :(得分:4)
HQL中提供了以下功能,您可以使用它们:
second(...), minute(...), hour(...), day(...), month(...), year(...)
答案 1 :(得分:1)
将表达式添加为SQL限制,而不是具有完整的本机查询。我不是特别了解MySQL,但想象一下这样的事情:
Criteria criteria = session.createCriteria(MyTable.class);
criteria.add(
Expression.sql(
"TIME( {alias}.my_date, 'hh:mm:ss') >= :1",
dateRangeMin,
new StringType()
)
);