爲何使用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