5

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

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

4

2 回答 2

4

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

second(...), minute(...), hour(...), day(...), month(...), year(...)

于 2008-09-19T12:54:50.437 回答
1

将表达式添加为 SQL 限制,而不是使用完整的本机查询。我不具体了解 MySQL,但想象一下这样的事情:

Criteria criteria = session.createCriteria(MyTable.class);
criteria.add( 
  Expression.sql(
    "TIME( {alias}.my_date, 'hh:mm:ss') >= :1", 
    dateRangeMin, 
    new StringType()
  )
);
于 2008-09-19T12:59:28.880 回答