2010-02-28 117 views
1

我有一個類User有一個域叫做birthDate,它是一個java.sql.Date。 如何執行hql查詢,檢索minmax年之間的所有User按hql查詢年齡

(我的真實情況比這稍微複雜一些,但這就是我現在被卡住的地方)。

UPDATE

它必須是一個HQL表達,所以我可以把在計算財產的時代表達。

回答

5

計算對應於最小和最大年齡的出生日期。然後使用下面的HQL。

Select u from User u where u.birthDate between :minDate and :maxDate 

安裝了該minDatemaxDate你執行查詢之前計算出的值。

+0

+1好主意,但我想要一個hql表達式,然後我可以把它放在一個計算字段中。 – flybywire 2010-02-28 13:48:19

+0

是否有一個特定的原因,您希望計算嚴格執行內部查詢? AFAIK HQL不支持日期算術。但您可以使用Hibernate的本機SQL在查詢中執行它們。我不確定該場景是否值得通過使用本機SQL來取消數據庫獨立性。 – 2010-03-01 06:44:26

0

這取決於數據庫。大多數人都有一些處理日期算法的方法。 MySQL有一個datediff函數,它會返回幾天,所以你可以將它除以365並且變得非常接近。 MySQL方言已經有了datediff作爲註冊功能。對於其他數據庫,您可能需要使用不同的功能,並可能使用自定義方言進行註冊。但是,除非您考慮閏年,這在HQL表達式中是棘手的,否則您可能會略微偏離。使用日期比較容易,因爲您可以保持月份和日期不變,更改年份,然後在HQL中使用<或>。