2011-02-02 23 views
1

我正在尋找將當前時間戳x天數轉換爲查詢值的HQL等效項。僅在HQL/JQL中使用Hibernate/JPA查詢如何設置where子句以持續x天?

所以像這樣的須藤-HQL: 從報紙作爲報紙 其中newspaper.published < CURRENT_TIMESTAMP - 天(:daysparam)

然後daysparam注入的查詢參數。併發布日期字段。

這是否可以在HQL中完成,無需編寫自己的hibernate方言或在實際代碼中使用條件?看起來像標準功能不被純HQL支持似乎很奇怪。

我使用Spring批次的HibernatePagingItemReader只爲XML,所以我想避免延長該類或創建自己的自定義方言等

類似的問題似乎只能建議日曆性判據或者新方言的yakshaving:

Performing Date/Time Math In HQL?

How to perform date operations in hibernate HQL

回答

0

東西看起來不正確的:你說publisheddate字段(在數據庫中,我想)。然後,您正在使用current_timestamp減去一個整數值與日期字段進行比較。因此,你是而不是獲取參數中的日期的時間戳,你只是得到current_timestamp - 2,我不相信代表「兩天前」;-)如果您使用current_date,我想它可能工作。

from Newspaper as newspaper where newspaper.published < current_date - :daysparam 

但儘管如此,我寧願這樣計算留給Java端,以便查詢將是:

from Newspaper as newspaper where newspaper.published < :start_date 

,如果你不使用UTC這不僅將工作你的服務器(你應該)。

+0

確實,current_date在這種情況下更合適,雖然理論上我可能想要在4小時前得到所有東西。 – flurdy 2011-02-03 11:16:00