[RESOLVIDO] Problema criando query nativa: Not all named parameters have been set

Bom dia, pessoal!

A situação é a sequinte:

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?

Esse post mostra como realizar consultas: JPA Consultas e Dicas

Ôpa, Augusto.

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=orxav]Ôpa, Augusto.

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.

Segue o link http://www.postgresql.org/docs/7.1/static/functions-datetime.html

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.

Leia o post que eu te passei.

Se você quer utilizar o HQL/JPQL essas funções não irão funcionar. to_char, :: ou qualquer outra coisa específica do postgres.

Ou da uma lida no artigo ali do Hebert, ele têm muita experiência também, e pode te ajudar melhor que eu as vezes :wink:

Hebert e Augusto, obrigado pelas respostas.

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.

Obrigado pelas respostas.
Forte abraço!

Beleza! Se precisar estamos aí! Só não esquece de editar o tópico para RESOLVIDO. :wink:

até a próxima!

Hehe. Quase esquecia. :slight_smile:
Valeu!