Dlaczego używasz Restrictions.like(...
)?
Powinieneś użyć Restrictions.eq(...)
.
Pamiętaj, że możesz również użyć .le
, .lt
, .ge
, .gt
na obiektach daty jako operatory porównania. LIKE
operator nie jest odpowiedni w tym przypadku, ponieważ LIKE
jest przydatne, gdy chcesz dopasować wyniki zgodnie z częściową zawartością kolumny. Więcej informacji znajdziesz na stronie http://www.sql-tutorial.net/SQL-LIKE.asp.
Na przykład, jeśli masz kolumnę nazw z pełnym imieniem i nazwiskiem niektórych osób, możesz wykonać where name like 'robert %'
dzięki czemu zwrócisz wszystkie wpisy o nazwach zaczynających się od 'robert '
(%
może zastąpić dowolny znak).
W Twoim przypadku znasz pełną treść daty, którą próbujesz dopasować, więc nie powinieneś używać LIKE
ale równość. Sądzę, że Hibernate nie daje w tym przypadku żadnego wyjątku, ale i tak prawdopodobnie będziesz mieć ten sam problem z Restrictions.eq(...)
.
Twój obiekt z datą, który otrzymałeś z kodem:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
String myDate = "17-04-2011";
Date date = formatter.parse(myDate);
Ten obiekt daty jest równy 17-04-2011 na 0h, 0 minutach, 0 sekundach i 0 nanosekundach.
Oznacza to, że Twoje wpisy w bazie danych muszą mieć dokładnie ta randka. Mam na myśli to, że jeśli wpis w bazie danych zawiera datę „17-kwiecień-2011 19:20:23.707000000”, to nie zostanie on pobrany, ponieważ po prostu pytasz o tę datę:„17-kwiecień-2011 00:00:00.00000000000".
Jeśli chcesz pobrać wszystkie wpisy do swojej bazy danych z danego dnia, będziesz musiał użyć następującego kodu:
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) );