我正在使用hibernate(更具体地说是spring-jpa)构建应用程序。 我的模型类包含一个java.util.Date字段,我想基于date字段过滤记录,而忽略时间部分。
我尝试通过spring-jpa规范来实现这一点,但是对于相等的操作,它总是返回0个对象
我进一步调试了这个问题,发现休眠时返回的字段类型为Object.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对象相等。
答案 0 :(得分:1)
您可以像此工具enter link description here
中那样使用Date.compareTo()函数我也用这个小代码段进行了测试,它可以按预期工作
Date date = new Date();
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
System.out.println(date.compareTo(sqlDate) == 0);
如果您使用的是Java8,为什么不将Entity类中的日期类型更改为LocalDate呢?