Por que você usa
Restrictions.like(...
)? Você deve usar
Restrictions.eq(...)
. Observe que você também pode usar
.le
, .lt
, .ge
, .gt
em objetos de data como operadores de comparação. LIKE
operador não é apropriado para este caso, pois LIKE
é útil quando você deseja corresponder os resultados de acordo com o conteúdo parcial de uma coluna. Consulte http://www.sql-tutorial.net/SQL-LIKE.asp para obter a referência. Por exemplo, se você tem uma coluna de nome com o nome completo de algumas pessoas, você pode fazer
where name like 'robert %'
para que você retorne todas as entradas com nome começando com 'robert '
(%
pode substituir qualquer caractere). No seu caso, você conhece o conteúdo completo da data que está tentando corresponder, portanto, não deve usar
LIKE
mas igualdade. Eu acho que o Hibernate não oferece nenhuma exceção neste caso, mas de qualquer forma você provavelmente terá o mesmo problema com o Restrictions.eq(...)
. Seu objeto de data que você obteve com o código:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
String myDate = "17-04-2011";
Date date = formatter.parse(myDate);
Este objeto de data é igual a 17-04-2011 às 0h, 0 minutos, 0 segundos e 0 nanossegundos.
Isso significa que suas entradas no banco de dados devem ter exatamente Aquela data. O que quero dizer é que, se a entrada do banco de dados tiver uma data "17-April-2011 19:20:23.707000000", ela não será recuperada porque você acabou de solicitar essa data:"17-April-2011 00:00:00.0000000000".
Se você quiser recuperar todas as entradas do seu banco de dados de um determinado dia, você terá que usar o seguinte código:
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) );