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
Não sei se é a melhor forma, mas fiz uma busca colocando com where <= data and >= data+1 dia.
T
tauame
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
C
CintiaDR
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:
SELECT a FROM Acidente a WHERE to_date(a.dataAcidente,'dd/MM/yyyy') = '21-01-2011'
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.
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)
C
CintiaDR
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.