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

时间:2020-03-06 14:25:47  来源:igfitidea点击:

我有一个将休眠(注释)/ mysql组合用于ORM的应用程序。在该应用程序中,我得到了一个带有"日期"字段的实体。我正在寻找一种在时间范围内选择该日期的方法(因此hh:mm:ss不包含日期部分)。

在MySQL中,有一个函数TIME(expression)可以提取时间部分并在where子句中使用它,但是如果不切换到本地查询,Hibernate中似乎不可用。休眠中是否可以执行此操作,还是我应该遍历Java中的结果并在那里进行比较?这会比MySQL解决方案慢很多吗,因为它还是不会使用索引?

解决方案

HQL中提供以下功能,也许我们可​​以使用它们:

秒(...),分钟(...),小时(...),日期(...),月份(...),年份(...)`

将表达式添加为SQL限制,而不要使用完整的本机查询。我不特别了解MySQL,但可以想象这样的事情:

Criteria criteria = session.createCriteria(MyTable.class);
criteria.add( 
  Expression.sql(
    "TIME( {alias}.my_date, 'hh:mm:ss') >= :1", 
    dateRangeMin, 
    new StringType()
  )
);