你为什么用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);
此日期对象等于 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) );