我有一个类User
有一个域叫做birthDate
,它是一个java.sql.Date
。 如何执行hql查询,检索min
和max
年之间的所有User
?按hql查询年龄
(我的真实情况比这稍微复杂一些,但这就是我现在被卡住的地方)。
UPDATE
它必须是一个HQL表达,所以我可以把在计算财产的时代表达。
我有一个类User
有一个域叫做birthDate
,它是一个java.sql.Date
。 如何执行hql查询,检索min
和max
年之间的所有User
?按hql查询年龄
(我的真实情况比这稍微复杂一些,但这就是我现在被卡住的地方)。
UPDATE
它必须是一个HQL表达,所以我可以把在计算财产的时代表达。
计算对应于最小和最大年龄的出生日期。然后使用下面的HQL。
Select u from User u where u.birthDate between :minDate and :maxDate
安装了该minDate
和maxDate
你执行查询之前计算出的值。
这取决于数据库。大多数人都有一些处理日期算法的方法。 MySQL有一个datediff函数,它会返回几天,所以你可以将它除以365并且变得非常接近。 MySQL方言已经有了datediff作为注册功能。对于其他数据库,您可能需要使用不同的功能,并可能使用自定义方言进行注册。但是,除非您考虑闰年,这在HQL表达式中是棘手的,否则您可能会略微偏离。使用日期比较容易,因为您可以保持月份和日期不变,更改年份,然后在HQL中使用<或>。
+1好主意,但我想要一个hql表达式,然后我可以把它放在一个计算字段中。 – flybywire 2010-02-28 13:48:19
是否有一个特定的原因,您希望计算严格执行内部查询? AFAIK HQL不支持日期算术。但您可以使用Hibernate的本机SQL在查询中执行它们。我不确定该场景是否值得通过使用本机SQL来取消数据库独立性。 – 2010-03-01 06:44:26