Защо използвате 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 в 0 часа, 0 минути, 0 секунди и 0 наносекунди.
Това означава, че вашите записи в базата данни трябва да имат точно тази дата. Имам предвид, че ако записът ви в базата данни има дата "17-април-2011 19:20:23.707000000", тогава той няма да бъде извлечен, защото просто поискате тази дата:"17-април-2011 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) );