[RESOLVIDO] Hibernate 3 não traz resultado de comparação de data com MySql 5.5

Prezados,

Estou com um problema enorme e já naveguei por toda a web tentando resolvê-lo.

Tenho o seguinte método:

	public List<Grupo> consultarData() throws DAOException {
		try {
			return this.getSession().createCriteria(Grupo.class).add(
					Restrictions.ne("status", "Cancelado")).add(
					Restrictions
							.eq("data", new Timestamp(new Date().getTime())))
					.list();
		} catch (final HibernateException e) {
			throw new DAOException(e);
		}
	}

E tenho registros no banco na data de hoje, tanto que ao executar a query que o hibernate gera direto no banco eu consigo resultados:

    select
        this_.id as id4_0_,
        this_.idCooperativa as idCooper6_4_0_,
        this_.data as data4_0_,
        this_.idDestino as idDestino4_0_,
        this_.idFuncionario as idFuncio8_4_0_,
        this_.horaPartida as horaPart3_4_0_,
        this_.qtdFuncionarios as qtdFunci4_4_0_,
        this_.status as status4_0_ 
    from
        trabalhoeds.grupo this_ 
    where
        this_.status<>'Cancelado'
        and this_.data='2011-07-17'

Alguém saberia me responder o motivo do hibernate não conseguir trazer os resultados? Já tentei com java.util.Date, java.sql.Date e agora com java.sql.Timestamp e até agora nada…

Minha coluna é do tipo date…

Obrigado a todos pela ajuda e atenção.

Hi… cara acredito que esse problema exista pelo seguinte, quando vc mapea um certo tipo de dado como Date
o MySQL grava no formato yyyy-MM-dd HH:mm:ss e o parâmetro que tu ta passando para a consulta
ta indo so no formato yyyy-MM-dd.

Uma solução seria:

Query query = session.createQuery("from Grupo g WHERE g.data like '2011-07-17%'");
List<Grupo> grupos = query.list();

Fala jweibe,

Realmente quem criou meu banco foi o Hibernate mesmo, eu tinha os HBMs e mandei ele criar o banco pra mim. Depois com o banco criado retirei os HBMs e criei as classes anotadas.

Realmente o Hibernate criou meu campo de data como datetime, mas eu fui na mão e alterei a tabela para ser só date. Com isso, o próprio MySQL alterou todos os registros da minha tabela retirando a hora.

O engraçado é que no banco ele está parseando minhas datas e gravando elas no formato dd/MM/yyyy, como vocês podem ver na figura abaixo:

Daí vocês podem pensar que eu estou viajando e criei meu campo data como varchar, mas como vocês podem ver na seguinte figura, eu criei o campo como date apenas, sem time.

.

Vou tentar sua solução, pois é apenas um trabalho acadêmico, mas realmente queria aprender a solução deste problema, então agradeço se vierem outras soluções.

Acho que achei o problema, mas não a solução…

Acredito que o hibernate não está colocando as aspas entre ‘’, daí o erro. Alguém sabe como corrigir isso?

fala pgioseffi blz… Cara executa um select diretamente no console do MySQL… pelo que eu sei o mysql utiliza o padrão de
datas americano para manipulação desse tipo de dado, sendo assim o formato deveria ser yyyy-MM-dd.

Fala jweibe,

Cara, mais uma vez obrigado pela ajuda. Mas isso eu já fiz, no meu primeiro post eu mostro a query que executei no banco.

O problema é a query que minha aplicação faz. Tô achando q o problema na verdade é o operador.

Fiz um teste e um select onde meu minha cláusula where era data <= ‘yyyy-MM-dd’ and data >= ‘yyyy-MM-dd’, a consulta vinha com resultados errôneos, mas com between funcionou legal.

O problema é que pra menor ou igual não tem outro tipo de operador. Tô desistindo já e tratando o erro no próprio Java, o que é uma pena… =(

Descobri meu erro.

Eu mapeei meu campo data com o Temporal.Timestamp. Após mudar todos os parâmetros que iam para o banco para esse tipo, meu problema foi finalmente resolvido.