为什么使用Restrictions.like(…)?
你应该使用Restrictions.eq(…)。
注意,您也可以使用.le,.lt,.ge,.gt作为比较运算符的日期对象。 LIKE运算符对于这种情况是不合适的,因为当您希望根据列的部分内容匹配结果时,LIKE非常有用。
请参阅http://www.sql-tutorial.net/SQL-LIKE.asp参考。
例如,如果您有一个名称列,其中有一些人的全名,您可以在“robert%”这样的名称,以便以“robert”开头的所有条目返回(%可以替换任何字符)。
在你的情况下,你知道你尝试匹配的日期的完整内容,所以你不应该使用LIKE但是相等。我猜Hibernate在这种情况下不会给你任何异常,但是无论如何,你可能会遇到与Restrictions.eq(…)相同的问题。
您使用代码的日期对象:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
String myDate = "17-04-2011";
Date date = formatter.parse(myDate);
该日期对象在0h,0分钟,0秒和0纳秒等于17-04-2011。
这意味着您的数据库中的条目必须具有该日期。我的意思是,如果你的数据库条目有一个日期“2011年4月17日19:20:23.7http://www.sql-tutorial.net/SQL-LIKE.asp000”,那么将不会被检索,因为你只是要求那个日期:“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) );