代码之家  ›  专栏  ›  技术社区  ›  WesternGun

记录存在时,在日期之间休眠搜索不返回结果

  •  0
  • WesternGun  · 技术社区  · 9 年前

    在我的应用程序中,我允许用户选择一个日期范围进行搜索,而这两个日期可以是同一天。这两个 datepickers 把这一天当作 String 这样地:

    14/01/2016
    

    我手动添加 HH:mm:ss 将它们解析为 Date 对象,并将它们传递到我的过滤器中进行搜索。实际上,就像这样:

    filter.setDateFrom(dateFormatComplete.parse(form.getDateFromStr().concat(" 00:00:00")));
    filter.setDateTo(dateFormatComplete.parse(form.getDateToStr().concat(" 23:59:59")));
    

    当我用 hibernate.sql.Query 在我的Hibernate代码中:

    select distinct myBean ..... where myBean.date >= :dateFrom and myBean.date <= :dateTo order by myBean.date asc
    

    我可以看到调试中传递的参数:

    dateFrom =Thu Jan 14 00:00:00 CET 2016, dateTo =Thu Jan 14 23:59:59 CET 2016
    

    尽管我的Oracle数据库中有此记录,但不会返回任何结果:

    SELECT TO_CHAR( DATE, 'DD-MM-YYYY HH24:MI:SS') FROM MYBEAN WHERE  DATE between TO_DATE('14-01-2016 00:00:00', 'DD-MM-YYYY HH24:MI:SS') and TO_DATE('14-01-2016 23:59:59', 'DD-MM-YYYY HH24:MI:SS');
    14-01-2016 10:37:14
    

    如果我选择第13天和第14天,也没有结果。但如果我选择14和15,是的。

    所以我不明白。我已经看到了关于的问题,但我在这里正确配置了一天的开始和结束。为什么我拿不到我的记录?

    编辑 DAO方法使用 Query 出于某种原因,我无法将其更改为 Criteria .

    1 回复  |  直到 9 年前
        1
  •  0
  •   Deepak Tripathi    9 年前

    试试这个-

    filter.setDateFrom(dateFormatComplete.parse(form.getDateFromStr().concat(" 00:00:00")));
    filter.setDateTo(dateFormatComplete.parse(form.getDateToStr().concat(" 23:59:59")));
    
    criteria.add(Restrictions.between("dateField", fromDate, toDate));