我有一个班级User
,其中一个名为birthDate
的字段是java.sql.Date
。
如何执行将检索User
和min
年之间的所有max
的hql查询?
(我的真实场景稍微复杂一点,但那就是我现在被困住的地方)。
更新
它必须是一个hql表达式,所以我可以将age表达式放在一个计算属性中。
答案 0 :(得分:5)
计算与最小和最大年龄相对应的出生日期。然后使用下面的HQL。
Select u from User u where u.birthDate between :minDate and :maxDate
将minDate
和maxDate
设置为您在执行查询之前计算的值。
答案 1 :(得分:0)
这取决于数据库。大多数都有一些处理日期算术的方法。 MySQL有一个日期函数,它将返回几天,所以你可以将它除以365并且相当接近。 MySQL方言已经将datediff作为注册函数。对于其他数据库,您可能需要使用不同的功能,并可能使用自定义方言注册它们。但是你可能会稍微偏离一点,除非你把闰年考虑在内,这在HQL表达式中很棘手。使用日期更容易,因为您可以保持月和日不变,更改年份,然后使用<或者>在HQL中。