Fala galera,
Estou tentando fazer um select com JPA e estou tendo dificuldades.
Tenho a seguinte estrutura do banco.
Tabela PreNota
Tabela NotaFiscal
Tablea PreNota_NotaFiscal - nessa tenho um relacionamento ManyToMany.
Quando eu vou “cadastrar” uma nota fiscal, tenho que buscar as pré-notas que foram cadastradas em um determinado período.
O usuário informa as datas de início e fim e eu devo buscar no banco as pré-notas.
Sendo assim fiz o seguinte:
public List<Prenota> buscarPreNota(Date dtInicio, Date dtFinal){
List<Prenota> lstPreNota = new ArrayList<Prenota>();
Query query = _em.createQuery("SELECT p FROM Prenota p WHERE p.dataEmissao BETWEEN :dataInicio AND :dataFim");
query.setParameter("dataInicio", dtInicio);
query.setParameter("dataFim", dtFinal);
if(!query.getResultList().isEmpty())
lstPreNota = query.getResultList();
return lstPreNota;
}
Isso dá certo, porém, eu preciso trazer as pré-notas que ainda não estejam relacionadas com uma nota fiscal.
No MySql executei a seguinte consulta:
SELECT * FROM prenota p LEFT OUTER JOIN prenota_notafiscal nf
ON p.codigoprenota = nf.codigoprenota
where nf.codigoprenota IS NULL
Dessa forma, fazendo a consulta diretamente no banco de dados ele me traz exatamente o que eu quero, somente as pré-notas que não constam na tabela prenota_notafiscal.
Tentei fazer assim:
Query query = _em.createQuery("SELECT p FROM Prenota p LEFT OUTER JOIN PrenotaNotafiscal nf "
+ " ON nf.prenota = p"
+ " WHERE"
+ " nf.prenota IS NULL"
+ " AND "
+ "(p.dataEmissao BETWEEN :dataInicio AND :dataFim)");
Só que aparece a seguinte mensagem de erro: “Syntax error parsing the query [SELECT…]”
Alguém tem alguma dica de como fazer isso?