Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro no JPQL

Boa noite,

Pessoal estou usando JSF + PrimeFaces e JPA, criei uma função que tinha como intuito verificar se o e-mail existia no sistema, caso o e-mail existisse ele não deixava o usuario criar outros users, mas toda vez que chego nesta função dá pau.

Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: = near line 1, column 71 [select u from br.com.caelum.livraria.modelo.Usuario u  where (u.ativo = :pAtivo is true)]
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1364)
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1300)
    at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:309)
    at br.com.caelum.livraria.dao.UsuarioDao.existeEmail(UsuarioDao.java:40)
    at br.com.caelum.livraria.bean.UsuarioBean.gravar(UsuarioBean.java:52)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:247)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    ... 30 more
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: = near line 1, column 71 [select u from br.com.caelum.livraria.modelo.Usuario u  where (u.ativo = :pAtivo is true)]
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
    at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:79)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:255)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168)
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:221)
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:199)
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1735)
    at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:301)
    ... 40 more
1 resposta
solução!

Clinton o seu erro está na jpql como você pode ter visto ai.

O erro tá falando que o select tá errado, o select não seria algo como.

public List<Usuario> lista(Usuario usuario) {
    return this.manager.createQuery("Select u FROM Usuario u WHERE u.ativo = true and u.ativo = :pAtivo")
}

Não sei estou apenas chutando, mais se você estiver certeza do seu select está correto vi uma falha no seu código, aonde você deixa um espaço a mais e isso também pode ocorrer erro.

select u from br.com.caelum.livraria.modelo.Usuario u  where (u.ativo = :pAtivo is true)

No seu u where tem um espaço a mais ali.

Troca deixando sem o espaço.

ASSIM.

select u from br.com.caelum.livraria.modelo.Usuario u where (u.ativo = :pAtivo is true)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software