【发布时间】:2019-07-11 06:54:44
【问题描述】:
我正在使用 hibernate(更具体地说是 spring-jpa)构建一个应用程序。 我的模型类包含一个 java.util.Date 字段,我想根据日期字段过滤记录,忽略时间部分。
我尝试使用 spring-jpa 规范来实现这一点,但对于相等的操作,它总是返回 0 个对象
我进一步调试了这个问题,发现当hibernate返回字段类型为java.sql.timeStamp的对象时,我将它与java.util.Date进行比较,所以它永远不会匹配。
以下是我用于调试的示例代码
List<EmployeeLeaves> l = empLeaveDao.findAll();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-DD");
Date date = formatter.parse("2018-04-28");
long time = date.getTime();
date = new java.sql.Timestamp(time);
for (EmployeeLeaves d : l) {
System.out.println(d.getAppliedOn().getClass().getName());
if (d.getAppliedOn().equals(date)) {
System.out.println("==============" + d.getRecordId());
}
}
return l;
仍然没有运气,因为两个日期对象永远不会匹配,因为 equals 方法永远不会返回 true。
谁能建议如何创建一个新的 Date 对象,以便它可以与数据库返回的 Date 对象相等。
【问题讨论】:
-
EmployeeLeaves 上的日期是什么类型的?
-
它的 java.util.Date 但是当我从 DB 中检索它时,我得到了 java.sql.timestamp(我的表列是 Date 类型)
-
我建议你不要使用
SimpleDateFormat、Date和Timestamp。这些类设计不佳且早已过时,尤其是第一个类是出了名的麻烦。而是使用java.time, the modern Java date and time API。除非您有一个非常旧的 Spring JPA 版本,否则它应该能够很好地处理来自 java.time 的类型。我认为LocalDate是您所追求的现代课程。