0

我有一个用户类,它有一个出生日期变量,我正在尝试编写一个条件查询来查找所有超过 X 岁且小于 Y 的用户,其中 X 和 Y 是两个整数,出生日期是日期。

我使用这个表达式解决了它,但我想避免使用表达式,因为我猜它只适用于 MySQL。

.createCriteria(User.class)
.add(Expression
         .sql("DATE_FORMAT( FROM_DAYS( TO_DAYS( NOW( ) ) - TO_DAYS( BIRTHDATE ) ) ,  '%Y' ) >= " + lowAge))
.add(Expression
         .sql("DATE_FORMAT( FROM_DAYS( TO_DAYS( NOW( ) ) - TO_DAYS( BIRTHDATE ) ) ,  '%Y' ) <= " + highAge))

有任何想法吗?

4

2 回答 2

2

这是一个老问题。但是今天我以这种方式解决了,可能对更多人有帮助:

Criteria=cri=session.createCriteria(YourClass.class);
Conjunction conj=Restrictions.conjunction();
Calendar cal=Calendar.getInstance();
cal.add(Calendar.YEAR,(-1*age));
Date birthEnd=cal.getTime();
cal.add(Calendar.YEAR,-1);
Date birthStart=cal.getTime();
conj.add(Restrictions.gt("birthdayAttributeName", birthStart));
conj.add(Restrictions.le("birthdayAttributeName", birthEnd));
disj.add(conj);
于 2015-05-26T18:54:16.720 回答
1

可以Restrictions改用吗?

.createCriteria(User.class)
.add(Restrictions.ge("birthdate", lowAge))
.add(Restrictions.le("birthdate", highAge))

birthdate是您User班级的出生日期字段。

于 2012-07-03T20:14:33.163 回答