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

Reh*_*man 8 java 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);
Run Code Online (Sandbox Code Playgroud)

提前致谢

JMe*_*nik 13

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

YourService.java

Date fromTimestamp = new Date();
Date toTimestamp = new Date();
Date fromDate = DateHelper.getDateWithoutTime(fromTimestamp);
Date toDate = DateHelper.getDateWithoutTime(DateHelper.getTomorrowDate(toTimestamp));
Run Code Online (Sandbox Code Playgroud)

YourDAO.java

criteria.add(Restrictions.ge(TIMESTAMP_FIELD, fromDate));
criteria.add(Restrictions.le(TIMESTAMP_FIELD, toDate));
Run Code Online (Sandbox Code Playgroud)

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();
}
Run Code Online (Sandbox Code Playgroud)

当然 - 每个代码都有重构的空间.