2010-02-28 81 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中使用<或>。