Erro de sintaxe da Query - Persistencia [RESOLVIDO]

Olá, Pessoal!

Mais um erro de executar é um erro de sintaxe da query em persistencia, veja a mensage de erro.

javax.faces.el.EvaluationException: java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: Exception Description: Syntax error parsing the query [ select t from turma t inner join notas n on n.turma = t.codTurma inner join aluno a on n.aluno = a.matriculaAluno inner join usuario u on u.idUsuario = a.usuario where u.idUsuario = ?1 ]. Internal Exception: org.eclipse.persistence.internal.libraries.antlr.runtime.EarlyExitException

Mas esse query que testei no Banco de dados e funcionou e não apareceu erro. não entendo essa Persistencia ocorreu erro.

Eu estou criando o filtro para usuario para filtrar a receber os valores só a turma.

Código dentro da Controlador da JPA

public ArrayList<Turma> getTurmaList(Usuario u) {
        EntityManager em = getEntityManager();
        ArrayList<Turma> lista = new ArrayList<Turma>();

        String query = " select t from turma t inner join notas n on n.turma = t.codTurma inner join aluno a on n.aluno = a.matriculaAluno inner join usuario u on u.idUsuario = a.usuario where u.idUsuario = ?1 ";

        try {
            if (getTurmaCount() > 0) {
                lista = (ArrayList<Turma>) em.createQuery(query).setParameter(1, u).getResultList();
            }
        } finally {
            em.close();
        }
        return lista;
    }

Espero que me ajuda, obrigado!

O que é esse 1 ali ?
a.usuario where u.idUsuario = ?1

[quote=fdiaz2011]O que é esse 1 ali ?
a.usuario where u.idUsuario = ?1[/quote]

Esse identificação do paramentro para referencia o numero 1 quando inserir valor no paramentro o código “.setParameter(1, u)” , veja em uma linha de codigo aqui.

Por alguma razão não houve interpretação do ?1.
Testou com named parameter? (:param)?

Pois eh. Isso ai ta errado.
Faz como o drsmachado disse.

[quote=fdiaz2011]Pois eh. Isso ai ta errado.
Faz como o drsmachado disse.[/quote]
Errado não está, parâmetros podem ser passados de duas formas ao jpql, named (:param) e numerated (?1).

[quote=drsmachado][quote=fdiaz2011]Pois eh. Isso ai ta errado.
Faz como o drsmachado disse.[/quote]
Errado não está, parâmetros podem ser passados de duas formas ao jpql, named (:param) e numerated (?1).[/quote]

Esse erro é sintaxe da query, não parametro, esse JPQL funciona as duas formas como drsmachado disse.

Esse query que eu testando direito no Banco de dados e funcionou, mas na Persistencia não funcionou e apareceu os erros.

[quote=jsnpereira]
Esse query que eu testando direito no Banco de dados e funcionou, mas na Persistencia não funcionou e apareceu os erros.[/quote]
O problema é que na BD tu tens SQL e aqui precisas de JPQL.

A tua query terá de ser algo assim:

[code]String query = " select t from Turma t " // A entidade Turma e não a tabela turma
+"inner join t.notas n " // assumindo que a entidade Turma tem um atributo notas

  • "inner join n.aluno a " // assumindo que a entidade Nota (Notas ou que outro nome tiver) tem um atributo aluno
  • "inner join a.usuario u " // assuminuto que a entidade Aluno tem um atributo usuario
  • "where u.idUsuario = ?1 "; [/code]