Hvorfor bruger du Restrictions.like(...
)?
Du bør bruge Restrictions.eq(...)
.
Bemærk, at du også kan bruge .le
, .lt
, .ge
, .gt
på datoobjekter som sammenligningsoperatorer. LIKE
operator er ikke passende i dette tilfælde, da LIKE
er nyttig, når du vil matche resultater i henhold til delvist indhold af en kolonne. Se venligst http://www.sql-tutorial.net/SQL-LIKE.asp for reference.
For eksempel hvis du har en navnekolonne med nogle personers fulde navn, kan du gøre where name like 'robert %'
så du vil returnere alle poster med navn, der starter med 'robert '
(%
kan erstatte et hvilket som helst tegn).
I dit tilfælde kender du det fulde indhold af den dato, du prøver at matche, så du bør ikke bruge LIKE
men ligestilling. Jeg gætter på, at Hibernate ikke giver dig nogen undtagelse i dette tilfælde, men alligevel vil du sandsynligvis have det samme problem med Restrictions.eq(...)
.
Dit datoobjekt fik du med koden:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
String myDate = "17-04-2011";
Date date = formatter.parse(myDate);
Dette datoobjekt er lig med 17-04-2011 kl. 0h, 0 minutter, 0 sekunder og 0 nanosekunder.
Det betyder, at dine poster i databasen skal have præcis den dato. Hvad jeg mener er, at hvis din databasepost har en dato "17-April-2011 19:20:23.707000000", så vil den ikke blive hentet, fordi du bare beder om denne dato:"17-April-2011 00:00:00.0000000000".
Hvis du vil hente alle indtastninger i din database fra en given dag, skal du bruge følgende kode:
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) );