假设我有一个TransactionDetails类。该表保留了过去10年的交易。现在我如何获得当年的所有TransactionDetails
我正在使用以下标准
Criteria criteria = session.getCurrentSession().createCriteria(TransactionDetails.class);
criteria.add(Restrictions.eq("entryDate", thisYear));
return (List<TransactionDetails>) criteria.list();
我知道我可以通过检测年初和年末来实现这一点,并在运营商之间进行查询。但我正在寻找一种方法来做到这一点。例如像在sql中我们使用CURDATE()
怎么办?
答案 0 :(得分:1)
尝试Restrictions.between("entryDate", loDate, highDate)
修改强>
您也可能使用(供应商特定的)sql限制。
例如:Restrictions.sqlRestriction("to_char(entry_date, 'YYYY') = ?", "2015", StringType.INSTANCE)
注意:这可能会比between
答案 1 :(得分:1)
您需要将between
限制与日期范围一起使用:
Calendar lowCal = Calendar.getInstance();
lowCal.set(Calendar.DAY_OF_YEAR, lowCal.getActualMinimum(Calendar.DAY_OF_YEAR);
Date lowDate = lowCal.getTime();
Calendar highCal = Calendar.getInstance();
lowCal.set(Calendar.DAY_OF_YEAR, lowCal.getActualMaximum(Calendar.DAY_OF_YEAR);
Date highDate = highCal.getTime();
Criteria criteria = session.getCurrentSession().createCriteria(TransactionDetails.class);
criteria.add(Restrictions.between("entryDate", lowDate, highDate));
return (List<TransactionDetails>) criteria.list();
日期是通过基本的Java Calendar
API获得的。如果当然可以以不同的方式获取日期,例如使用Joda Time。
答案 2 :(得分:0)
Restrictions.between("entryDate",fromYear, thisYear)
可以满足您的需求。在此参考API
或计算10年前的年/日并使用
Restrictions.ge("entryDate",fromYearMinus10);//uses years less than 10