分析
您正在混合存储数据的方式和预览数据的方式。数据库不关心格式,用户关心。
使用TemporalType将日期存储在数据库中,有三种形式:日期、时间和时间戳。
使用DateFormat向用户预览日期:yyyy-MM-dd、yyyy-MM-dd'T'HH:mm:ss 等。
通过删除 date 的不必要部分,按给定日期的任何部分(忽略格式)查询数据库。
解决方案
您需要两个日期,一个代表今天的 00:00 和明天的 00:00,这将涵盖一天 24 小时。从两个日期中删除时间并将它们传递给查询:
Date fromTimestamp = new Date();
Date toTimestamp = new Date();
Date fromDate = DateHelper.getDateWithoutTime(fromTimestamp);
Date toDate = DateHelper.getDateWithoutTime(
DateHelper.getTomorrowDate(toTimestamp));
//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();
}
更新您的查询以使用两个参数:
@NamedQuery(name="getEmployeeByDate",
query="select p from Emp p where p.joinDate >= ? and p.joinDate <= ?")