Query HQL utilizando Date

4 respostas
M

Pessoal,

Estou fazendo uma query HQL em que preciso encontrar todos os registros de uma tabela aonde a data seja igual à data parametrizada. O problema é que não está retornando registros, pois está pesquisando além da data, a hora.
Abaixo o código. O campo data é o lstqDat.

Query q = this.getSession().createQuery("select sum(l.lanctoEstoquePK.lstqQtd) from LanctoEstoque l where " +
        "l.lanctoEstoquePK.empsCod = :empsCod and l.lanctoEstoquePK.filiCod =  :filiCod and " +
        "l.lanctoEstoquePK.mateCod = :mateCod and l.lanctoEstoquePK.lstqDat = :lstqDat and " +
        "l.lanctoEstoquePK.topeCod = :topeCod group by l.lanctoEstoquePK.lstqQtd");
       
        q.setParameter("empsCod", le.getLanctoEstoquePK().getEmpsCod());
        q.setParameter("filiCod", le.getLanctoEstoquePK().getFiliCod());
        q.setParameter("mateCod", le.getLanctoEstoquePK().getMateCod());
        q.setDate("lstqDat", le.getLanctoEstoquePK().getLstqDat());
        q.setParameter("topeCod", le.getLanctoEstoquePK().getTopeCod());

Gostaria de saber como fazer para buscar somente a data, ignorando as horas. :roll:

Obrigado!
:lol:

4 Respostas

C

Já tentou algo assim?

... "l.lanctoEstoquePK.lstqDat = CAST(:lstqDat as DATE) " ...
M

Acabo de fazer o teste.

Após inserir o CAST, passou a dar NullPointerException…

é necessário mais alguma alteração no código, ou importação??

C

mgarcia:
Acabo de fazer o teste.

Após inserir o CAST, passou a dar NullPointerException…

é necessário mais alguma alteração no código, ou importação??

Tá com cara de que sua data está chegando null no método onde vc faz a consulta…
Dá uma debugada nisso ai.

R

Já me deparei com este problema.
Arrumei uma solução, mas não sei se é a mais “decente”.

public List<Horario> findAllByClubeByData(Clube clube, Date data) {
    	Date ate = CalendarUtil.ultimoInstante(data);
    	String query = "select hr from Agenda as ag "
                     + " left outer join ag.agendaTees as at "
                     + " left outer join at.horarios as hr "
                     + " where ag.clube = :clube "
                     + "   and hr.hora between :inicio and :fim "
                     + " order by hr.hora, at.tee ";		
        return session.createQuery(query).setEntity("clube", clube)
                     .setTimestamp("inicio", data)
                     .setTimestamp("fim", ate).list();
    }

    public static Date ultimoInstante(Date data) {
    	Calendar ate = Calendar.getInstance();
    	ate.setTime(data);
    	ate.set(Calendar.HOUR_OF_DAY, 23);
    	ate.set(Calendar.MINUTE, 59);
    	ate.set(Calendar.SECOND, 59);
    	ate.set(Calendar.MILLISECOND, 999);
    	return ate.getTime();
	}
Criado 13 de dezembro de 2007
Ultima resposta 13 de dez. de 2007
Respostas 4
Participantes 3