Hibernate, select e between

Colegas,

Tenho persistido um objeto no banco que tem dois atributos:
dataInicial 01/01/2008 e dataFinal 31/12/2008 no formato Date, naturalmente.

Na consulta abaixo se pesquiso a data 01/01/2008 ele encontra-a no período acima.
Porém se consulto 31/12/2008 ele não encontra. O que me parece é que o between me devolve da dataInicial(inclusive) até a dataFinal menos 1.
Ou seja qqer dia que eu pesquise entre 01/01/2008 e 30/12/2008 ele encontra.

É isso mesmo? Caso afirmativo existe uma forma de obter da dataInicial até a dataFinal(inclusive)?

Muito obrigado,

José Marques

@NamedQuery(name = "ProdutividadeValorBase.findByData",
			query = "SELECT v FROM ProdutividadeValorBase v WHERE :data BETWEEN dataInicial AND dataFinal")

Para corrigir o problema, tente usar o método setTimestamp para passar os parâmetros dataInicial e dataFinal.

Não sei com NamedQuerys mas voce podia usar o Criteria.

Criteria c = session.createCriteria(ProdutividadeValorBase.class);
c.add(Restrictions.between(data, dataFinal);
List<ProdutividadeValorBase.class> list = c.list();

Tenho esse mesmo problema.

Acho que, infelizmente, temos de adicionar um na data final…

paulo

Ahh… no meu sistema eu seto na data final o horario para
23:59:59 e da inicial para 00:00:00.
Assim ele mostra todas desse periodo.

[quote=Mark_Ameba]Ahh… no meu sistema eu seto na data final o horario para
23:59:59 e da inicial para 00:00:00.
Assim ele mostra todas desse periodo.[/quote]

perfeito.

Essa thread é antiga, mas tenho o seguinte problema:

Tenho uma busca com o hibernate, usando Criteria e Between, da seguinte forma:

[code]Calendar baseDate = Calendar.getInstance();

//data minima
baseDate.setTime(relatorioPontosBeanFiltro.getDataInicial());
baseDate.set(Calendar.HOUR, 1);
baseDate.set(Calendar.MINUTE, 1);
baseDate.set(Calendar.SECOND, 1);
Date dataInicialFormatada = baseDate.getTime();

//data máxima
baseDate.setTime(relatorioPontosBeanFiltro.getDataFinal());
baseDate.set(Calendar.HOUR, 23);
baseDate.set(Calendar.MINUTE, 59);
baseDate.set(Calendar.SECOND, 59);
Date dataFinalFormatada = baseDate.getTime();

criteria.add(Restrictions.between(“dataCriacao”, dataInicialFormatada, dataFinalFormatada));[/code]

A data inicial eu entro como ?01/09/2011? e data final como ?30/09/2011?, porém é retornado registros com data de 31/08/2011 também.

Para que me seja retornada apenas datas de acordo com o filtro acima eu tenho que passar a data inicial como ?02/09/2011?, dai sim vem apenas registros entre 01 e 30/09…

Como já fiz várias pesquisas na web e em livros, e não encontrei qual o motivo disso, passei a pesquisar se não seria algum problema no VPS ou no MYSQL.

Verifiquei que tanto as datas do Server como do MYSQL estão defasadas, por exemplo, agora são ?00:19 do dia 14/09?, e no VPS e MYSQL está como ?23:20 do dia 13/09?.

Seria isso o problema? Ou teriam alguma sugestão?