Transformar a seguinte NativeQuery em JPQL

1 resposta
furacao123

Aew galera tenho o seguinte select

Query qry = em.createNativeQuery("SELECT * " + "FROM ecftef.produto p " + "INNER JOIN ecftef.produtovalor pv ON pv.idproduto = p.id " + "INNER JOIN ecftef.produtoestoque pe ON pe.idproduto = p.id " + "INNER JOIN ecftef.produtotrib pt ON pt.idproduto = p.id " + "INNER JOIN ecftef.embalagem emb ON emb.id = p.idemb " + "WHERE (p.id BETWEEN ?1 AND ?2) " + "AND (SELECT " + "count(em.idproduto) " + "FROM " + "ecftef.estoquemovimentacaoitem em " + "INNER JOIN ecftef.estoquemovimentacao e ON e.id = em.idestoquemovimentacao " + "INNER JOIN ecftef.estoquelocal l ON l.id = e.idlocal " + "INNER JOIN ecftef.estoquestatus s ON s.id = e.idstatus " + "WHERE " + "p.id = em.idproduto AND l.id = ?3 AND s.id = ?4) = 0 " + "ORDER BY p.id", Produto.class);

ele funciona mas me da uma perda muito grande de performance pois ele nao faz o FETCH nos objetos relacionados a produto mesmo eles estando setado como EAGER pois é um relacionamento OneToOne

+ "INNER JOIN ecftef.produtovalor pv ON pv.idproduto = p.id " + "INNER JOIN ecftef.produtoestoque pe ON pe.idproduto = p.id " + "INNER JOIN ecftef.produtotrib pt ON pt.idproduto = p.id " + "INNER JOIN ecftef.embalagem emb ON emb.id = p.idemb "

como eu poderia fazer esse select em JPQL fiquei tentando bolar alguma coisa mas nao consegui fazer o Inner Join em Subquery no JPA

1 Resposta

furacao123

dei uma pesquisada e cheguei a esse JPQL

@NamedQuery(name = "Produto.findByIntervaloId", query = "SELECT DISTINCT p FROM Produto p LEFT OUTER JOIN FETCH p.codigoBarrasSet " + "LEFT OUTER JOIN FETCH p.produtoValor LEFT OUTER JOIN FETCH p.produtoEstoque LEFT OUTER JOIN FETCH p.categoria " + "LEFT OUTER JOIN FETCH p.produtoTrib LEFT OUTER JOIN FETCH p.embalagem " + "LEFT OUTER JOIN p.estMovItemList e " + "WHERE (p.id BETWEEN :id1 AND :id2) " + "AND (SELECT COUNT(em.produto.id) " + "FROM new EstoqueMovimentacaoItem em " + "LEFT JOIN em.estoqueMovimentacao " + "LEFT JOIN em.estoqueMovimentacao.estoqueLocal " + "LEFT JOIN em.estoqueMovimentacao.estoqueStatus " + "WHERE " + "p.id = em.produto.id AND em.estoqueMovimentacao.estoqueLocal.id = :idLocal " + "AND em.estoqueMovimentacao.estoqueStatus = :idStatus) = 0 " + "ORDER BY p.id"),

mas ainda nao funciona me retorna SEVERE: line 1:382: unexpected token: FROM

Criado 29 de setembro de 2010
Ultima resposta 29 de set. de 2010
Respostas 1
Participantes 1