Group By com Hibernate JPA

Bom dia amigos.

Alguem tem um exemplo com hibernate JPA onde eu faço uma consulta como a no exemplo abaixo:

SELECT COUNT(A.CAMPO_A) AS CONTADO, B.CAMPO_B FROM TABELA_A A, TABELA_B B WHERE A.ID = B.ID GROUP BY B.CAMPO_B

Gostaria de imprimir no System.out.println(CONTADO + " <->" + B.CAMPO_B);

O que consegui foi ou um ou outro, nunca consegui imprimir os dois ao mesmo netmpo.

Me ajudem!

Ja procurei de tudo, parece que quem detem esta informação não quer compartilhar!

Abraço.

Bom dia,

Calma, não há nenhuma conspiração sobre isso :smiley:

tente primeiro algo mais simples que retorne 2 valores como:

Query q = em.createQuery("SELECT p.nome, p.cpf FROM Pessoa as p");
List<Object[]> l2 = q.getResultList();
for (Object[] c:l2) {
System.out.println(c[0] + " " + c[1]);
}

Depois tente da forma que vc deseja (não posso testar agora, mas creio que seja assim):

Query q = em.createQuery("SELECT e.numero, count(p) from Pessoa p JOIN p.endereco e GROUP BY e.rua");

// recupere como no exemplo anterior

Se preferir, podes criar um bean auxiliar:

public class PessoasRua {
  private int numeroRua;
  private int totalPessoas;

  // construtor que será utilizado na Query
  public PessoasRua(int numero, int total) { this.numeroRua = numero; this.totalPessoas = total; }
  // gets..
}

Query q = em.createQuery("SELECT new pacote.PessoasRuas(e.numero, count(p)) from Pessoa p JOIN p.endereco e GROUP BY e.rua");

Olá Rock.

Fiz seu exemplo e deu erro justamente em getEntityManager() com a mensagem “cannot find symbol”

Contudo estou postando a minha classe que esta retornando somente o group by.

[code] SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();

    String SQL_QUERY = "select count(bairroId) as qde from PessoasEndereco in class br.com.padrao.vo.PessoasEnderecoVO group by bairroId";
    //String SQL_QUERY = "select count(bairroId) as qde from PessoasEndereco in class br.com.padrao.vo.PessoasEnderecoVO group by bairroId";
    Query query = session.createQuery(SQL_QUERY);


    for (Iterator it = query.iterate(); it.hasNext();) {
        long row = (Long) it.next();
        System.out.print("Bairro: " + row);
    }
    session.getTransaction().commit();
    session.close();[/code]

Tenho outra que tentei e que é a principal onde eu quero aplicar o resultado para popular o gráfico:

Veja:

[code]
//List pessoasEnderecoVO = new ArrayList();

    DefaultPieDataset pieDataset = new DefaultPieDataset();

    try {
        Session sess = HibernateUtil.getInstance().getSession();
        //Query query = sess.createQuery("select sum(bairroId) as conta, bairroId from PessoasEndereco in class br.com.padrao.vo.PessoasEnderecoVO group by bairroId");
        Query query = sess.createQuery("from PessoasEndereco in class br.com.padrao.vo.PessoasEnderecoVO group by bairroId");

        Iterator list = query.iterate();
        PessoasEnderecoVO pessoasEndereco = null;


        while (list.hasNext()) {
            pessoasEndereco = (PessoasEnderecoVO) list.next();
            String a = pessoasEndereco.getBairroId().getDsbairro();


            pieDataset.setValue(a, new Integer(1)); //<<<==== Aqui deveria ficar os valores agrupados.
            //pieDataset.setValue(NOME DO BAIRRO, new Integer(CONTAGEM DE BAIRROS REPETIDOS));
        }

        JFreeChart chart = ChartFactory.createPieChart(
                "Gráfico de Pizza", // Title
                pieDataset, // Dataset
                true, // Show legend
                true, // Use tooltips
                false // Configure chart to generate URLs?
                );
        try {
            PiePlot P = (PiePlot) chart.getPlot();
            ChartFrame frame = new ChartFrame("Pie Chart", chart);
            frame.setVisible(true);
            frame.setSize(900, 600);

        } catch (Exception e) {
            System.out.println("Ocorreu um problema ao executar JFreeChart" + e);
        }

    } catch (Exception e) {
        System.out.println("lista papel: " + e);
        //return (null);
    }[/code]

Se puder me ajudar nesta segunda classe eu agradeço, mas se der me mostre por gentileza em qualquer uma.

Abraço.