仅将日期的日期部分与hibernate中的时间戳进行比较

我在数据库和应用程序中有时间戳我确实有日期。 我喜欢以hibernate可以将所有条目与日期匹配的方式编写hibernate标准,而不是时间部分。 例如

在DB时间戳中

2011-12-01 15:14:14

在应用程序中,我确实有java.util.Date,它默认具有时间部分。

我的问题是当我从数据库中搜索条目时,我得到的代码一无所获

DetachedCriteria criteria = DetachedCriteria.forClass(MyClass.class); criteria.add(Restrictions.like(TIMESTAMP_FIELD, javaUtilDate)); List entries =this.getHibernateTemplate().findByCriteria(criteria); 

提前致谢

如果您正在寻找按日期范围进行过滤一般用法 (例如,从今天到明天)。 我这样用它:

YourService.java

 Date fromTimestamp = new Date(); Date toTimestamp = new Date(); Date fromDate = DateHelper.getDateWithoutTime(fromTimestamp); Date toDate = DateHelper.getDateWithoutTime(DateHelper.getTomorrowDate(toTimestamp)); 

YourDAO.java

 criteria.add(Restrictions.ge(TIMESTAMP_FIELD, fromDate)); criteria.add(Restrictions.le(TIMESTAMP_FIELD, toDate)); 

DateHelper.java

 public static Date getDateWithoutTime(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); return cal.getTime(); } public static Date getTomorrowDate(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(Calendar.DATE, 1); return cal.getTime(); } 

当然 – 每个代码都有重构的空间。

like运算符只能用于String值。 它在约会上没有意义。

如果您的日期是2011-12-01 (假设这里是yyyy-MM-dd ),并且您想要在当天拥有时间戳的所有行,那么您将搜索时间戳为>= 2011-12-01所有行>= 2011-12-01< 2011-12-02

因此,在您的日期添加1天(使用临时Calendar对象),并使用以下代码:

 criteria.add(Restrictions.ge(TIMESTAMP_FIELD, javaUtilDate)); criteria.add(Restrictions.lt(TIMESTAMP_FIELD, javaUtilDatePlusOneDay)); 
 if (model.getFromDOE() != null) { criteria.add(Restrictions.ge("createdDate", getFormattedFromDateTime(model.getFromDOE()))); } if (model.getToDOE() != null) { criteria.add(Restrictions.le("createdDate", getFormattedToDateTime(model.getToDOE()))); } private Date getFormattedFromDateTime(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); return cal.getTime(); } private Date getFormattedToDateTime(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); return cal.getTime(); }