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

时间:2016-01-15 10:27:02

标签: hibernate date oracle11g between

在我的应用中,我允许用户选择一个日期范围来进行搜索,而这两个日期可以是同一天。这两个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在我的代码中使用hibernate.sql.Query进行搜索时

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

我可以看到在debug中传递的参数:

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

尽管我在Oracle db中有这条记录,但没有返回任何结果:

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 个答案:

答案 0 :(得分:0)

试试这个 -

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));