Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较数据库日期和Java日期_Java_Hibernate_Jpa_Date - Fatal编程技术网

比较数据库日期和Java日期

比较数据库日期和Java日期,java,hibernate,jpa,date,Java,Hibernate,Jpa,Date,我正在更具体地使用HibernateString jpa构建一个应用程序。 我的模型类包含一个java.util.Date字段,我希望根据日期字段过滤记录,忽略时间部分 我试图用SpringJPA规范实现这一点,但对于相等的操作,它总是返回0个对象 我进一步调试了这个问题,发现当hibernate返回字段类型为java.sql.timeStamp的对象时,我将其与java.util.Date进行了比较,因此它从不匹配 下面是我用于调试的示例代码 List<EmployeeLe

我正在更具体地使用HibernateString jpa构建一个应用程序。 我的模型类包含一个java.util.Date字段,我希望根据日期字段过滤记录,忽略时间部分

我试图用SpringJPA规范实现这一点,但对于相等的操作,它总是返回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.compare,如本文所述

我还使用这个小代码段进行了测试,它可以正常工作

Date date = new Date();
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
System.out.println(date.compareTo(sqlDate) == 0);

另外,如果您使用java8,为什么不将Entity类中的日期类型更改为LocalDate,您就不会有这种问题?

EmployeeLeaves上的日期是什么类型?它是java.util.date,但当我从DB检索它时,我得到java.sql.timestampmy表列的类型是date。我建议您不要使用SimpleDateFormat,日期和时间戳。这些类设计得很糟糕,而且早已过时,第一个类尤其令人讨厌。而是使用。除非您有一个非常旧的SpringJPA版本,否则它应该能够很好地处理java.time中的类型。我认为LocalDate是您所追求的现代类。我无法使它以任何有用的方式工作。您的代码片段正在比较两个具有相同毫秒值的日期对象,尽管可能是java.util和java.sql中的两个不同日期类。毫不奇怪,这会产生0。这如何解决提问者的问题?它通过更改新的SimpleDataFormatyyy-MM-DD来工作;新的简化格式yyy-MM-dd;这个答案使用了糟糕的日期时间类,这些类在几年前被采用JSR 310的现代java.time类所取代。@BasilBourque这就是我建议他使用java 8的LocalDate的原因