Problema em Criteria com group by [Resolvido]

3 respostas
fernandogodoy18

Fiz a seguinte criteria

try {
            Criteria crit = HibernateUtility.getSession().createCriteria(Visita.class);           
            crit.setProjection(Projections.projectionList().add(Projections.groupProperty("tipoVisita"), "tipoVisita"));
            DateFormat formatInicial = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
            DateFormat formatFinal = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
            Date dtI = (Date) formatInicial.parse(new SimpleDateFormat("yyyy/MM/dd 00:00:00").format(dtInicial));
            Date dtF = (Date) formatFinal.parse(new SimpleDateFormat("yyyy/MM/dd 23:59:59").format(dtFinal));
            crit.add(Restrictions.between("dataVisita", new Date(dtI.getTime()), new Date(dtF.getTime())));
            if (funcionario != null) {
                crit.add(Restrictions.eq("funcionario", funcionario));
            }

            lista = crit.list();

        } catch (ParseException ex) {
            JOptionPane.showMessageDialog(null, "Data inválida");
        }

Porém ela esta retornando a seguinte query

select
        this_.tipoVisita as y0_ 
    from
        Visita this_ 
    where
        this_.dataVisita between ? and ? 
        and this_.idFuncionario=? 
    group by
        this_.tipoVisita

mais eu preciso que o funcionario esteja nu select

alguem ja fez algo do tipo e pode me dar uma dica do que pode estar acontecendo ??

grato desde já,

3 Respostas

fernandogodoy18

Após algumas horas consegui resolver isto

agora meu SQL ficou desta forma

select
        this_.tipoVisita as y0_,
        this_.idFuncionario as y1_,
        this_.vendaRealizada as y2_,
        count(this_.idFuncionario) as y3_ 
    from
        Visita this_ 
    where
        this_.dataVisita between ? and ? 
        and this_.idFuncionario=? 
    group by
        this_.tipoVisita,
        this_.idFuncionario

faltam algumas coisinhas mais a questão do group by esta OK

J

Coloca as modificações ai para ajudar os outros.

fernandogodoy18

Com o group by ta ae…

agora meu problema é retornar os dados da classe funcionario nesta mesma consulta!!!
alguem tem uma idéia ae!

Projections.projectionList();
            Criteria crit = HibernateUtility.getSession().createCriteria(Visita.class);
            ProjectionList projList = Projections.projectionList();
            crit.setProjection(Projections.projectionList().add(Projections.groupProperty("tipoVisita"), "tipoVisita")
                    .add(Projections.groupProperty("funcionario"))
                    .add(Projections.property("vendaRealizada"))
                    .add(Projections.count("funcionario")));

            DateFormat formatInicial = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
            DateFormat formatFinal = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
            Date dtI = (Date) formatInicial.parse(new SimpleDateFormat("yyyy/MM/dd 00:00:00").format(dtInicial));
            Date dtF = (Date) formatFinal.parse(new SimpleDateFormat("yyyy/MM/dd 23:59:59").format(dtFinal));
            crit.add(Restrictions.between("dataVisita", new Date(dtI.getTime()), new Date(dtF.getTime())));

            if (funcionario != null) {
                crit.add(Restrictions.eq("funcionario", funcionario));

            }

            lista = crit.list();
Criado 27 de janeiro de 2011
Ultima resposta 27 de jan. de 2011
Respostas 3
Participantes 2