Select "LEFT OUTER JOIN" com JPA [Resolvido]

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?

Joins em JPA-QL são diferentes de SQL.

você faz

Não se usa a cláusula ON e a junção é feita chamando a coleção do objeto. Dá uma olhada no manual do Hibernate ou EclipseLink para mais detalhes…

[quote=fabiocsilva]Joins em JPA-QL são diferentes de SQL.

você faz

Não se usa a cláusula ON e a junção é feita chamando a coleção do objeto. Dá uma olhada no manual do Hibernate ou EclipseLink para mais detalhes…[/quote]

Perfeito,
Consegui fazer…Ficou da seguinte forma:

Query query = _em.createQuery("SELECT p FROM Prenota p LEFT JOIN p.prenotaNotafiscalCollection nf "
                                      + " WHERE nf.prenota IS NULL"
                                      + " AND "
                                      + "(p.dataEmissao BETWEEN :dataInicio AND :dataFim)");

Valeu pela dica!
Thanks!