1
resposta

Problemas comJPQL e CRITERIA

Estou tentando implementar o criteria em um sistema que possuo junto com o JPA, nele quero que me que me passe as seleções da minha tabela ordenada, e com o valor dos grupos a qual os produtos ordenados são iguais sejam somados. Infelizmente não consegui no JPQL realizar essa ultima parte e agora estou fazendo com o criteria, mas como faria essa soma?

 String mapa = "select sum(p.pesoFinal) from Peso p join fetch p.mapa m where m.status = :cStatus order by p.receita.produto.categoria, p.receita.materia.id";
`

Esse de cima seria como ficaria o codigo, mas por algum motivo essa query não executa, se tirar o sum e colocar apenas o "p" ele funciona perfeitamente, mas colocando para selecionar o atributo ao inves da classe toda dar erro.

 String mapa = "select new br.com.exemplo.Peso(p.id, p.receita, sum( p.pesoFinal) from Peso p join fetch p.mapa m where m.status = :cStatus order by p.receita.produto.categoria, p.receita.materia.id";
`

Aqui foi outro forma que tentei fazer funcionar, mas também não obtive sucesso

         CriteriaBuilder crite = em.getCriteriaBuilder();
         CriteriaQuery<Peso> query = crite.createQuery(Peso.class);
         Root<Peso> root = query.from(Peso.class);

         Path<String> pathStatus = root.<Mapa>get("mapa").<String>get("status"); 
         Predicate predicateStatus = crite.equal(pathStatus, solicitado);

         Expression<String>  categoria = root.<Receita>get("receita").
                 <Produto>get("produto").<String>get("categoria");        
        Expression<Integer>  materia = root.<Receita>get("receita").
                 <Materia>get("materia").<Integer>get("id");
        query.select(root).where(predicateStatus).orderBy(crite.asc(categoria), crite.asc(materia));

Aqui seria o codigo pelo Criteria, mas ainda não sei como somar o valor de "pesoFinal"

1 resposta

Acho que ali na jpql faltou você fazer um group by pela informação que você juntar e depois somar. Faz sentido?