在hql中按年龄查询

时间:2010-02-28 11:26:24

标签: java sql hibernate datetime hql

我有一个班级User,其中一个名为birthDate的字段是java.sql.Date。 如何执行将检索Usermin年之间的所有max的hql查询?

(我的真实场景稍微复杂一点,但那就是我现在被困住的地方)。

更新

它必须是一个hql表达式,所以我可以将age表达式放在一个计算属性中。

2 个答案:

答案 0 :(得分:5)

计算与最小和最大年龄相对应的出生日期。然后使用下面的HQL。

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

minDatemaxDate设置为您在执行查询之前计算的值。

答案 1 :(得分:0)

这取决于数据库。大多数都有一些处理日期算术的方法。 MySQL有一个日期函数,它将返回几天,所以你可以将它除以365并且相当接近。 MySQL方言已经将datediff作为注册函数。对于其他数据库,您可能需要使用不同的功能,并可能使用自定义方言注册它们。但是你可能会稍微偏离一点,除非你把闰年考虑在内,这在HQL表达式中很棘手。使用日期更容易,因为您可以保持月和日不变,更改年份,然后使用<或者>在HQL中。