[RESOLVIDO] - NullPointerException em entityManager.createQuery(sql);

3 respostas Resolvido
oraclejpa
I

Olá.

Não manjo muito de JPA (na verdade eu não conheço quase nada de JPA, sempre usei JDBC puro e estou num projeto que usa JPA hehe).

Tenho o seguinte método:

private Boolean isSectionAlreadyAffected(final String section) {
    final LocalizationDAO locDao = new LocalizationDAO();		
    locDao.getEntityManager();
    final Map<String, Object> params = new HashMap<String, Object>();
    params.put("section", "5322");
    params.put("damageInformation.damage.event.id", "2383");
    final List<Localization> foundLocs = locDao.findByParameter(params);
    return (null != foundLocs) ? !foundLocs.isEmpty() : false;
}

A modelagem está assim:
Event > Damage > DamageInformation > Localization

Estou partindo de Localization e quero chegar em Event (sentido contrário: Event < Damage < DamageInformation < Localization).

O DAO genérico está assim:

public List<T> findByParameter(Map<String, Object> params) { 
    String sql = "SELECT o FROM " + getTypeClass().getName() + " o ";
    if (params.size() > 0) {
        sql += "where ";
    }
    for (Map.Entry<String, Object> param : params.entrySet()) {
         sql += "o." + param.getKey() + " = :" + param.getKey() + " and ";
    }
	
    if (params.size() > 0) {
        sql = sql.substring(0, sql.length() - 4 );
    }
	
    System.out.println(entityManager.isOpen());
    System.out.println("*** " + sql + " ***");
    Query query = entityManager.createQuery(sql);
    for (Map.Entry<String, Object> param : params.entrySet()) {
         query.setParameter(param.getKey(), param.getValue());
    }
    return query.getResultList();
}

Quando chega na linha Query query = entityManager.createQuery(sql); dá NullPointerException.

Quando executo apenas com um parâmetro (params.put("section", "5322");) funciona.
Então não é problema com o EntityManager.

Saída no console:

true
*** SELECT o FROM br.com.Localization o where o.damageInformation.damage.event.id = :damageInformation.damage.event.id and o.section = :section ***

StackTrace:

07/12/2016 08:36:17 com.sun.faces.lifecycle.InvokeApplicationPhase execute

AVISO: #{eventHandler.save}: java.lang.NullPointerException

javax.faces.FacesException: #{eventHandler.save}: java.lang.NullPointerException

at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)

at javax.faces.component.UICommand.broadcast(UICommand.java:315)

at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)

at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)

at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)

at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)

at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:78)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)

at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)

at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)

at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)

at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Thread.java:662)

Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException

at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)

at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)

 27 more

Caused by: java.lang.NullPointerException

at org.hibernate.hql.ast.HqlSqlWalker.lookupProperty(HqlSqlWalker.java:560)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4774)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.addrExprLhs(HqlSqlBaseWalker.java:5300)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4759)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.addrExprLhs(HqlSqlBaseWalker.java:5300)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4759)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1326)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4471)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3947)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2047)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1972)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:831)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:617)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:244)

at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:256)

at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:187)

at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:138)

at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:101)

at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:80)

at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124)

at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)

at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)

at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770)

at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:277)

at br.com.dao.GenericDAO.findByParameter(GenericDAO.java:83)

at br.com.business.impl.LocalizationBusiness.isSectionAlreadyAffected(LocalizationBusiness.java:89)

at br.com.business.impl.LocalizationBusiness.getAffectedDamages(LocalizationBusiness.java:47)

at br.com.business.impl.LocalizationBusiness.checkIfDamageAlreadyExistsInAirplaneSection(LocalizationBusiness.java:31)

at br.combusiness.impl.EventBusiness.save(EventBusiness.java:29)

at br.com.view.handler.EventHandler.save(EventHandler.java:668)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.apache.el.parser.AstValue.invoke(AstValue.java:278)

at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)

at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)

at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)

 28 more

Quando monto a query na mão e rodo no banco, funciona (com os mesmos parâmetros):

select e.*, l.COD_SECAO from 
    tbl_local l,
    tbl_info_dano i_d,
    tbl_dano d,
    tbl_evnt e
where 
    l.COD_SECAO = '5322' and
    l.COD_INFO_DANO = i_d.COD_INFO_DANO and
    i_d.COD_INFO_DANO = d.COD_INFO_DANO and
    d.COD_EVNT = e.COD_EVNT and
    e.COD_EVNT = '2383';

Estou apenas dando manutenção no projeto. Ele funciona 100% em relação ao JPA. Não é problema de configuração. Não comecei do zero. Apenas criei aquele primeiro método e estou tentando executar uma query.

Qualquer ajuda é bem vinda.

Obrigado!

3 Respostas

C
Solucao aceita

Tenta retirar os pontos do parâmetro “damageInformation.damage.event.id”, somente depois da igualdade.

I

Ahhhhhhh
Acho que entendi.
Vou testar aqui.
Já posto o resultado.
Valeu!

I

Era isso mesmo.
Fiz por NamedQuery e funcionou.
Valeu!

Criado 7 de dezembro de 2016
Ultima resposta 7 de dez. de 2016
Respostas 3
Participantes 2