JPA - Desprezar a hora de uma data

Olá pessoal, estou desenvolvendo um filtro onde pode-se filtrar a informação por data. Porém, no filtro só é possível escolher dia/mes/ano, e não hora… Entao quando gero a String de busca jpql, fica algo ± assim:

SELECT a FROM Acidente a WHERE a.dataAcidente = ‘21-01-2011’

só que com esta busca, ele só vai encontar um acidente que ocorreu na meia noite…

minha pergunta é: Não tem como dar um cast na data que tem no banco para comparar sómente a data (sem a hora)?

já pesquisei funções jpql para isso, mas n tive sucesso :confused:

Não sei se é a melhor forma, mas fiz uma busca colocando com where <= data and >= data+1 dia.

Pois é, isto funcionaria, mas o problema é que neste filtro, o usuário pode escolher se ele quer uma data “igual a”, “menor”, “maior que”, etc. e como neste filtro também podem ser escolhidos outros tipos de campos (como int por exemplo), então eu teria que fazer um ‘if’ só para testar se o tipo de dados é data, e se o operador é o ‘igual a’… Eu queria evitar este tipo de coisa :confused:

tauame, tem sim, mas aí depende do banco e não sei se é uma solução elegante, sabe?

Tipo, em HQL rodando em oracle seria algo assim:

Cada banco tem sua função pra isso. Não sei se você deseja algo assim, eu sempre tenho preferido tratar a data antes de passar como parametro.

[code]SELECT a FROM Acidente a WHERE a.dataAcidente = :dataAcidente

query.setParameter(“dataAcidente”, calendarTratado.getTime());
[/code]

A idéia do JPA é manter o código independente de banco… por isso se usa o jpql (java persistence query language) e não sql.

Mas eu já estou fazendo na mão via código java, está quase pronto… (eu queria ter evitado isto, pois o código ficou uma bagunça agora) :confused:

Pois então, por isso que disse que não era elegante. Você pode chamar funções específicas do banco por HQL/JPQL - não que seja indicado, mas às vezes a gente precisa de uma gambi maneira rs rs rs.