Varför använder du Restrictions.like(...
)?
Du bör använda Restrictions.eq(...)
.
Observera att du också kan använda .le
, .lt
, .ge
, .gt
på datumobjekt som jämförelseoperatorer. LIKE
operatorn är inte lämplig för det här fallet eftersom LIKE
är användbart när du vill matcha resultat enligt en del av innehållet i en kolumn. Se http://www.sql-tutorial.net/SQL-LIKE.asp för referens.
Om du till exempel har en namnkolumn med vissa personers fullständiga namn, kan du göra where name like 'robert %'
så att du returnerar alla poster med namn som börjar med 'robert '
(%
kan ersätta vilket tecken som helst).
I ditt fall känner du till hela innehållet i datumet du försöker matcha så du bör inte använda LIKE
men jämlikhet. Jag antar att Hibernate inte ger dig något undantag i det här fallet, men hur som helst kommer du förmodligen att ha samma problem med Restrictions.eq(...)
.
Ditt datumobjekt fick du med koden:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
String myDate = "17-04-2011";
Date date = formatter.parse(myDate);
Detta datumobjekt är lika med 2011-04-17 vid 0h, 0 minuter, 0 sekunder och 0 nanosekunder.
Det betyder att dina poster i databasen måste ha exakt det datumet. Vad jag menar är att om din databaspost har ett datum "17-April-2011 19:20:23.707000000", så kommer den inte att hämtas eftersom du bara ber om det datumet:"17-April-2011 00:00:00.0000000000".
Om du vill hämta alla poster i din databas från en viss dag måste du använda följande kod:
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) );