Meu SGBD é o Postgres e estou utilizando o Hibernate.
Preciso montar uma query nativa, utilizando campo_de_data::date, mas o Hibernate entente isso como se fosse um parâmetro.
SELECT *
FROM hd_ticket
WHERE data_criacao::date IN (SELECT DISTINCT data_criacao::date FROM hd_ticket WHERE id_usuario_criacao = :id_usuario_criacao)
AND id_usuario_criacao = :id_usuario_criacao
ORDER BY data_criacao DESC;
Eis a exceção:
Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryException: Not all named parameters have been set: [:date] [ SELECT * FROM hd_ticket WHERE data_criacao::date IN (SELECT DISTINCT data_criacao::date FROM hd_ticket WHERE id_usuario_criacao = :id_usuario_criacao) AND id_usuario_criacao = :id_usuario_criacao ORDER BY data_criacao DESC]
Alguém sabe como resolver esse probleminha?
Desde já, obrigado.
O problema é o seguinte: quando tu tenta colocar ::date, ele entende que esse :date é um parâmetro, e provavelmente você não está setando esse parâmetro na query. O problema é essse, mas na real eu não entendi bem pq você usa ::date. Pode me explicar?
Faço uso do campo seguido de ::date para o Postgres me retornar a data sem o ‘time’.
Não quero fazer uso de uma conversão explícita como TO_CHAR(campo, pattern).
Faço uso do campo seguido de ::date para o Postgres me retornar a data sem o ‘time’.
Não quero fazer uso de uma conversão explícita como TO_CHAR(campo, pattern).[/quote]
Não sei se no postgres tem truncate cara, mas da uma pesquisada sobre. Se existir o truncate como no Oracle, é só usar ele, dai você não precisa mais usar o ::date.
Caso você não queira usar uma “conversão explícita”, eu não sei que forma você poderia tentar fazer isso, pois a Query entende que quando você coloca ‘:’, irá ser um parâmetro, e aí que acontece o seu erro. Eu ainda aconselho a utilizar alguma das opções que se adequam melhor ao seu caso do link que colei logo acima.
Implementei utilizando TO_DATE mesmo. No Java eu faço a conversão da String para Date e, como estou utilizando Calendar, defino o time do meu Calendar a partir da data da conversão.
Fica um pouco mais chatinho, mas resolve.