2010-10-25 140 views
2

我有一個時間戳列在一個DB(Oracle)表中交易。 我使用hibernate作爲持久層來獲取數據並將其存儲到數據庫。 我有一個需求,我需要在日期查詢數據庫。 即從用戶界面用戶傳遞一個日期,我需要基於這個日期獲取過濾的數據。休眠查詢獲取日期時忽略時間戳的記錄

如果被交易的專欄只有日期部分,我的查詢返回正確的記錄 當交易的專欄填充了時間戳值,即(日期+時間)時,就會出現問題。然後這些值不會被查詢返回。

如:說有在DB 5 10條於2010年10月23日的他們有時間戳項和5不

所以,我有我的回報只有5行,其不具有時間戳查詢。

現在我知道我需要從時間戳提取日期,然後做對比,這樣我得到aprticular日期的所有記錄,但我不知道它與Hibernate如何完成和使用HQL

查詢中Java /休眠我使用的是如下

字符串hql =「選擇從POJO清除POJO POJO.tradeDate =:date」; Query query = getSession()。createQuery(hql); query.setParameter(「date」,date);

+0

這可能會幫助 - http://stackoverflow.com/questions/980366/using-hql-to-query-on-a -date-while-ignore-the-time-on-oracle – William 2010-10-25 09:40:44

回答

9
String hql = "from POJO as POJO where to_date(to_char(POJO.tradeDate, 'DD-MON-YY'), 'DD-MON-YY') = :date"; 
Query query = getSession().createQuery(hql); 
query.setParameter("date", date); 

[編輯]

當心,指數,如果有任何,在tradeDate如果你按照上面的查詢將不會被使用。在情況下,也有一些性能問題,你可以比較像這樣做,

String hql = "from POJO as POJO where POJO.tradeDate between :date and :ceilDate"; 
Query query = getSession().createQuery(hql); 
// a date having timestamp part, 00:00:00.0, or missing completely 
query.setParameter("date", date); 
// a date having timestamp part, 23:59:59.999 
query.setParameter("ceilDate", ceilDate); 
+0

非常感謝Adeel!它幫助我解決了問題 – Arun 2010-10-25 12:04:23