Proč používáte Restrictions.like(...
)?
Měli byste použít Restrictions.eq(...)
.
Všimněte si, že můžete také použít .le
, .lt
, .ge
, .gt
on date objekty jako operátory porovnání. LIKE
operátor není pro tento případ vhodný, protože LIKE
je užitečné, když chcete porovnávat výsledky podle částečného obsahu sloupce. Referenční informace najdete na http://www.sql-tutorial.net/SQL-LIKE.asp.
Pokud máte například sloupec se jménem s celým jménem některých lidí, můžete to udělat where name like 'robert %'
takže vrátíte všechny položky se jménem začínajícím 'robert '
(%
může nahradit jakýkoli znak).
Ve vašem případě znáte celý obsah data, které se pokoušíte najít, takže byste neměli používat LIKE
ale rovnost. Myslím, že Hibernate vám v tomto případě nedává žádnou výjimku, ale stejně budete mít pravděpodobně stejný problém s Restrictions.eq(...)
.
Váš objekt data, který jste dostali s kódem:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
String myDate = "17-04-2011";
Date date = formatter.parse(myDate);
Tento objekt data se rovná 17-04-2011 v 0h, 0 minutách, 0 sekundách a 0 nanosekundách.
To znamená, že vaše záznamy v databázi musí mít přesně to datum. Chci říct, že pokud má váš záznam v databázi datum „17-April-2011 19:20:23.707000000“, pak nebude načten, protože se jen zeptáte na toto datum:„17-April-2011 00:00:00,0000000000".
Pokud chcete načíst všechny položky vaší databáze z daného dne, budete muset použít následující kód:
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) );