Почему вы используете 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-April-2011 19: 20: 23.707000000», то она не будет получена, потому что вы просто запрашиваете эту дату: «17-April-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) );