Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Problema Consulta Agragada - Com dois pedidos com o mesmo produto.

Professor Boa Tarde,

Tentei incluir um mesmo produto para um outro pedido e a consulta agregada não funciona.

Segue abaixo os códigos.

Consulta

public ListrelatorioDeVendas(){

    String jpql = "SELECT new br.com.alura.vo.RelatorioDeVendasVo("
                  + "produto.nome, " 
                  + "SUM(item.quantidade), " 
                  + "MAX(pedido.data) "
                  + ")"
                  + "FROM Pedido pedido " 
                  + "JOIN pedido.itens item " 
                  + "JOIN item.produto produto "  
                  + "GROUP BY produto.nome "
                  + "ORDER BY item.quantidade DESC";

    return em.createQuery(jpql, RelatorioDeVendasVo.class).getResultList();
}



Teste

public static void main(String[] args) {

    popularBancodeDados();

    EntityManager entityManager = JPAUtil.getEntityManager();
    ProdutoDao produtoDao =  new ProdutoDao(entityManager);

    Produto produto1 = produtoDao.buscarPodId(1L);
    Produto produto2 = produtoDao.buscarPodId(2L);


    entityManager.getTransaction().begin();

    ClienteDao clienteDao = new ClienteDao(entityManager);
    Cliente cliente = clienteDao.buscarPorId(1L);

    Pedido pedido = new Pedido(cliente);
    Pedido pedido2 = new Pedido(cliente);

    pedido.adicionarItem(new ItemPedido(produto1, 2, pedido));

    pedido2.adicionarItem(new ItemPedido(produto1, 1, pedido2));
    pedido2.adicionarItem(new ItemPedido(produto2, 2, pedido2));


    PedidoDao pedidoDao = new PedidoDao(entityManager);

    pedidoDao.cadastrar(pedido);
    pedidoDao.cadastrar(pedido2);

    entityManager.getTransaction().commit();

    List<RelatorioDeVendasVo> relatorioDeVendas = pedidoDao.relatorioDeVendas();
}

ERRO:  

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "ITENS1_.QUANTIDADE" must be in the GROUP BY list; SQL statement:

OBS: As outras classes estão do mesmo jeito do projeto do curso.

O problema acontece quando cadastro um mesmo produto para pedidos diferentes.
2 respostas

Oi Igor,

Sim, foi vacilo meu mesmo, pois nessa consulta não pode ter o order by do jeito que expliquei nessa situação que você mencionou.

Basta apagar o ORDER BY item.quantidade DESC que resolve.

Bons estudos!

solução!

Obrigado,

Deu certo, mas daí perdi a ordenação, então fiz da forma abaixo e deu certo.

public List<RelatorioDeVendasVo> relatorioDeVendas() {
    String jpql = "SELECT new br.com.alura.loja.vo.RelatorioDeVendasVo("
            + "produto.nome, "
            + "SUM(item.quantidade) as soma, "
            + "MAX(pedido.data)) "
            + "FROM Pedido pedido "
            + "JOIN pedido.itens item "
            + "JOIN item.produto produto "
            + "GROUP BY produto.nome " 
            + "ORDER BY soma desc";