比较Hibernate中datetime字段的时间部分

时间:2008-09-19 12:45:09

标签: java mysql hibernate

我有一个使用hibernate(annotations)/ mysql组合的应用程序用于ORM。在该应用程序中,我得到了一个带有Date字段的实体。我正在寻找一种在一个时间范围内选择该日期的方法(所以hh:mm:没有日期部分的ss)。

在MySQL中有一个函数TIME(表达式),它可以提取时间部分并在where子句中使用它,但是在没有切换到本机查询的情况下,这似乎在Hibernate中不可用。 hibernate中是否有选项可以执行此操作,还是应该在java中循环结果并在那里进行比较?这会像MySQL解决方案那样慢得多,因为它不会使用索引吗?

2 个答案:

答案 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()
  )
);