Erro de sintaxe da Query - Persistencia [RESOLVIDO]

7 respostas
jsnpereira

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!

7 Respostas

F

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

jsnpereira

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

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.

drsmachado

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

F

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

drsmachado

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

Errado não está, parâmetros podem ser passados de duas formas ao jpql, named (:param) e numerated (?1).

jsnpereira

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

Errado não está, parâmetros podem ser passados de duas formas ao jpql, named (:param) e numerated (?1).

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.

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

A tua query terá de ser algo assim:

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 ";
Criado 10 de junho de 2013
Ultima resposta 10 de jun. de 2013
Respostas 7
Participantes 4