Hibernate, select e between

6 respostas
Marques

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")

6 Respostas

D

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

Marky.Vasconcelos

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();
Paulo_Silveira

Tenho esse mesmo problema.

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

paulo

Marky.Vasconcelos

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.

Paulo_Silveira

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.

perfeito.

C

Essa thread é antiga, mas tenho o seguinte problema:

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

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));

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?

Criado 20 de fevereiro de 2008
Ultima resposta 13 de set. de 2011
Respostas 6
Participantes 5