2008-09-19 62 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