我在数据库中有时间戳,在应用程序中我有日期。我喜欢编写hibernate标准,以便hibernate可以提取所有与日期匹配的条目,而不是时间部分。例如
在数据库时间戳记中
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(); }
当然,每个代码中始终都有重构的空间。