Tenho uma consulta onde um dos valores é passado por parametro para meu método, porém obtive resultados diferentes nas consultas geradas pelo JPA, quando montei minha consulta na ferramenta o BD não tive problemas em montar um relacionamento da seguinte maneira:
LEFT JOIN FILIAL_PROD_IMP I ON (I.CO_PRDCOD = P.PRD_COD AND I.CO_FILIAL = 1)
Sendo que o valor 1 é passado por parametro para ser usado no relacionamento.
Como posso fazer para que o JPA gere a consulta colocando a minha condição no relacionamento?
Método:
public List<Produto> getProdNaoImp(Integer prFilial){
Query qryProd = em.createQuery(" Select P "
+ " From Produto P "
+ " Left Join p.filialProdImp F "
+ " Where F.coFilial = "+prFilial+" And F.coPrdcod Is Null");
List<Produto> lstProduto = qryProd.getResultList();
return lstProduto;
}
SQL Gerada:
SELECT
t1.PRD_COD, t1.CO_CONTA, t1.PRD_LO_CMV, t1.PRD_PERMINESTOQUE, t1.NO_USUARIO, t1.QT_DIASVENDACOMPRA, t1.PRD_QT_ESTOQUE,
t1.PRD_LO_ESTOQUE,t1.PRD_DESC_ABV, t1.PRD_VL_VENDA, t1.CM_ATUAL, t1.PRD_CODBARRAS, t1.PRD_VL_COMPRA, t1.PRD_DESC,
t1.PRD_ESTOQUEATUAL
FROM {oj PRODUTO t1 LEFT OUTER JOIN FILIAL_PROD_IMP t0 ON (t0.CO_PRDCOD = t1.PRD_COD)}
WHERE ((t0.CO_FILIAL = ?) AND (t0.CO_PRDCOD IS NULL))
SQL que preciso:
SELECT P.*
FROM PRODUTO P
LEFT JOIN FILIAL_PROD_IMP I ON (I.CO_PRDCOD = P.PRD_COD AND I.CO_FILIAL = 1)
WHERE I.CO_PRDCOD IS NULL