比较数据库日期和Java日期

时间:2019-07-11 06:54:44

标签: java hibernate date jpa java-date

我正在使用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对象相等。

1 个答案:

答案 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呢?