为何使用Restrictions.like(...
)?您可以使用Restrictions.eq(...)
。
请注意,您还可以使用.le
,.lt
,.ge
,.gt
作为比较运算符的日期对象。 LIKE
运算符不适合这种情况,因为LIKE
在您想根据列的部分内容匹配结果时非常有用。 请参阅http://www.sql-tutorial.net/SQL-LIKE.asp以供参考。
例如,如果你有一些人的全名的名称栏,你可以做where name like 'robert %'
,这样你将返回名称以'robert '
所有条目(%
可以代替任何字符)。
就你而言,你知道你试图匹配的日期的全部内容,所以你不应该使用LIKE
,而是平等。我猜Hibernate在这种情况下不会给你任何例外,但无论如何,你可能会遇到与Restrictions.eq(...)
相同的问题。
你的代码有
你的约会对象:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
String myDate = "17-04-2011";
Date date = formatter.parse(myDate);
此Date对象是等于在17-04-2011在0H,0分0秒和0纳秒。
这意味着您在数据库中的条目必须有,该日期恰好为。我的意思是,如果你的数据库条目有一个日期“2011年4月17日19:20:23.707000000”,那么它将不会被检索,因为你只是要求这个日期:“2011年4月17日00:00: 00.0000000000" 。
如果你想从某一天检索数据库的所有条目,你将不得不使用下面的代码:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
String myDate = "17-04-2011";
// Create date 17-04-2011 - 00h00
Date minDate = formatter.parse(myDate);
// Create date 18-04-2011 - 00h00
// -> We take the 1st date and add it 1 day in millisecond thanks to a useful and not so known class
Date maxDate = new Date(minDate.getTime() + TimeUnit.DAYS.toMillis(1));
Conjunction and = Restrictions.conjunction();
// The order date must be >= 17-04-2011 - 00h00
and.add(Restrictions.ge("orderDate", minDate));
// And the order date must be < 18-04-2011 - 00h00
and.add(Restrictions.lt("orderDate", maxDate));
需要注意的是要明白,当你分析一个日期可能考虑要在其中解析时区是很重要很重要/格式Java日期 – 2014-09-12 17:01:52