2008-09-19 32 views
5

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

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

回答

4

以下功能HQL是可用的,也许你可以使用它们:

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

1

添加表达式作为SQL限制,而不是一个完整的原生查询。我不明白MySQL,但想象一下这样的事情:

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

该文档状态表达式是'半弃用'并使用Restrictions.sqlRestriction()。 – 2008-09-19 14:30:52