query model.vo a solution with jpql and subqueryes

Asked

Viewed 125 times

1

I have the following query in Mysql wanting to move to JPQL and I am doubtful in syntax:

SELECT a2.produto , 
       a2.descricao, 
       a2.quantidade_recente, 
       Soma 
  from (SELECT p.codigoProduto, 
               sum(p.quantidade_recente) as Soma 
          from previsaovendas.produto  as p, 
               previsaovendas.usuario u 
         where u.codigo = p.codigo_filial 
           and u.codigo_chefe = 3 
         group by p.codigoProduto) as a1,
      (SELECT p1.codigoProduto as produto, 
              p1.descricao, 
              p1.quantidade_recente 
         from previsaovendas.produto as p1,  
              previsaovendas.usuario u
        where u.codigo = p1.codigo_filial 
          and u.codigo_chefe = 3 ) as a2
 where a2.produto = a1.codigoProduto;

See the screen result

The jpql query that is :

String jpql1 = "select new br.com.previsao.model.vo.Filtro(a2.produto , a2.descricao, a2.quantidadeRecente, Soma)"
        + " (select p.codigoProduto, sum(p.quantidadeRecente) aS Soma  from Produto p where p.gerenteFilial.chefe.codigo =:codigo ) as a1,"
        + " (select p1.codigoProduto aS produto, p1.descricao, p1.quantidade_recente from Produto p1 where p1.gerenteFilial.chefe.codigo =:codigo ) as a2"
        + " where a2.produto = a1.codigoProduto";


 // metodo buscarPorPaginacao
 TypedQuery<Filtro> query = manager.createQuery(jpql1, Filtro.class);   
 query.setParameter("codigo", 3L);

 List<Filtro> resultado = query.getResultList(); 

 for (Filtro prod : resultado) {
      System.out.println(" Impressão Filtro da Empresa: ");
      System.out.println(" Nome : " + prod.getCodigoProduto() +  " Filtro " + prod.getDescricao()+  " Quantidade " + prod.getQuantidade()+ " Total " + prod.getTotal());

 }

get the error in stack :

Caused by: org.hibernate.hql.internal.Ast.Querysyntaxexception: Unexpected token: ( near line 1, column 99 [select new br.com.previsao.model.vo.Filter(a2.product , a2.Description, a2.quantityRecent, Soma) (select code sum(p.quantityRecent) as Soma from br.com.previsao.model.Product p Where p.gerenteFilial.chefe.codigo =:codigo ) as a1, (select P1.code Product production, P1.Description, P1.quantity_recent from br.com.previsao.model.Product P1 Where P1.gerenteFilial.chefe.codigo =:code ) as a2 Where a2.product = a1.code]

  • it seems that jpql does not accept subquerye

1 answer

1

Query is incorrect, missing a comma right at the point where the error occurs:

a2.descricao, a2.quantidadeRecente, Soma), (select p.
                                         ^

JPQL in Hibernate accepts SELECT, WHERE and in the HAVING. Therefore, as long as the logic of your query is correct, it is to work.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.