Hibernate获得当年的所有交易

时间:2015-09-18 09:30:08

标签: java hibernate

假设我有一个TransactionDetails类。该表保留了过去10年的交易。现在我如何获得当年的所有TransactionDetails

我正在使用以下标准

Criteria criteria = session.getCurrentSession().createCriteria(TransactionDetails.class);
criteria.add(Restrictions.eq("entryDate", thisYear));
return (List<TransactionDetails>) criteria.list();

我知道我可以通过检测年初和年末来实现这一点,并在运营商之间进行查询。但我正在寻找一种方法来做到这一点。例如像在sql中我们使用CURDATE()

怎么办?

3 个答案:

答案 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