Erro ao realizar consulta com @Query utilizando filtro de data e hora
09/02/2018 12:36
0
Olá

Estou com um problema para realizar uma consulta, aparentemente simples utilizando o @Query por um campo de data, se alguém já passou pelo mesmo problema, e puder me ajudar!

Estou usando Spring Boot versão: 1.5.6.RELEASE
Postgres 10 drive 42.2.1
Java 8

@Query("SELECT m FROM Movimento m where (:codigoAnimal IS NULL OR m.animal.id = :codigoAnimal) AND (:dataInicio IS NULL OR m.dataRegistro >= :dataInicio) AND (:dataFim IS NULL OR m.dataRegistro <= :dataFim)")
List<Movimento> findBySearch(@Param("codigoAnimal") Integer codigoAnimal, @Param("dataInicio") Date dataInicio, @Param("dataFim") Date dataFim);


No model Movimento o campo dataRegistro ta assim:

@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(iso=ISO.DATE_TIME)
@Column (name = "data_registro")
private Date dataRegistro;


Quando faço a consulta para o repository acontece o seguinte erro:

2018-02-09 11:19:24.348  WARN 12168 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: 42P18
2018-02-09 11:19:24.348 ERROR 12168 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : ERROR: could not determine data type of parameter $3
2018-02-09 11:19:24.373 ERROR 12168 --- [nio-8080-exec-1] o.s.boot.web.support.ErrorPageFilter     : Forwarding to error page from request [/dashboard/movimento] due to exception [could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet]
...
Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:106) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
...
Caused by: org.postgresql.util.PSQLException: ERROR: could not determine data type of parameter $3
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2422) ~[postgresql-42.2.1.jar:42.2.1]

O campo na tabela na tabela está:   data_registro timestamp without time zone,

a consulta é até gerada corretamente:
Hibernate: 
    /* SELECT
        m 
    FROM
        Movimento m 
    where
        (
            :codigoAnimal IS NULL 
            OR m.animal.id = :codigoAnimal
        ) 
        AND (
            :dataInicio IS NULL 
            OR m.dataRegistro >= :dataInicio
        ) 
        AND (
            :dataFim IS NULL 
            OR m.dataRegistro <= :dataFim
        ) */ select
            movimento0_.id as id1_3_,
            movimento0_.animal_id as animal_i4_3_,
            movimento0_.data_registro as data_reg2_3_,
            movimento0_.qtd_passos as qtd_pass3_3_ 
        from
            webapp.movimentos movimento0_ 
        where
            (
                ? is null 
                or movimento0_.animal_id=?
            ) 
            and (
                ? is null 
                or movimento0_.data_registro>=?
            ) 
            and (
                ? is null 
                or movimento0_.data_registro<=?
            )

Qualquer sugestão será bem vinda vlw!
Tags: Query,Sprint Data,Data Time


Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails, Spring e mais com a Formação itexto!

Livro de Spring


Participe do grupo "Spring Brasil" no WhatsApp!
Clique aqui para entrar!


/dev/All

Os melhores blogs de TI
em um único lugar!

 
Spring Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.