ERRO: Path expected for join!

3 respostas
Dassayev

Bom dia pessoal!

Estou tentando fazer um join com Hibernate, mas está gerando um erro. Ví alguns tópicos com esse problema, mas nenhum solucionou o meu problema, por isso criei esse.

HQL que estou tentando executar
"select pos from ProcessoOs pos inner join OrdemServico os, "
+ " Situacao s where pos.ordemServico = os.id and "
+ " pos.situacao = s.id and pos.responsavel.id = " + f.getId()
+ " and (s.tipo = 'N' or s.tipo = null)"
+ " and os.status = 'P' order by pos.dataFim, pos.nivel"
Erro gerado
org.hibernate.hql.ast.QuerySyntaxException: Path expected for join! [select pos from br.com.jdsistemas.audinfo.to.ProcessoOs pos inner join OrdemServico os,  br.com.jdsistemas.audinfo.to.Situacao s where pos.ordemServico = os.id and  pos.situacao = s.id and pos.responsavel.id = 1 and (s.tipo = 'N' or s.tipo = null) and os.status = 'P' order by pos.dataFim, pos.nivel]
        at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
        at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
        at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:82)
        at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:258)
        at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183)
        at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:134)
        at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
        at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
        at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)
        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:1650)
        at br.com.jdsistemas.audinfo.dao.ProcessoOsDAO.listarSemDependencias(ProcessoOsDAO.java:82)
        at br.com.jdsistemas.audinfo.dao.ProcessoOsDAO.getProcessosOsNaoFinalizados(ProcessoOsDAO.java:33)
        at br.com.jdsistemas.audinfo.bean.ProcessoOsBean.getProcessosOsNaoFinalizados(ProcessoOsBean.java:64)
        at br.com.jdsistemas.audinfo.bean.ProcessoOsBean.atualizarDataModelProcessosNaoFinalizados(ProcessoOsBean.java:97)
        at br.com.jdsistemas.audinfo.bean.ProcessoOsBean.<init>(ProcessoOsBean.java:58)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at java.lang.Class.newInstance0(Class.java:355)
        at java.lang.Class.newInstance(Class.java:308)
        at com.sun.faces.config.ManagedBeanFactoryImpl.newInstance(ManagedBeanFactoryImpl.java:277)
        at com.sun.faces.application.ApplicationAssociate.createAndMaybeStoreManagedBeans(ApplicationAssociate.java:546)
        at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:82)
        at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
        at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)
        at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61)
        at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
        at com.sun.faces.application.ValueBindingValueExpressionAdapter.getValue(ValueBindingValueExpressionAdapter.java:102)
        at org.ajax4jsf.taglib.html.facelets.KeepAliveHandler.apply(KeepAliveHandler.java:76)
        at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
        at com.sun.facelets.tag.jsf.ComponentHandler.applyNextHandler(ComponentHandler.java:314)
        at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:169)
        at com.sun.facelets.tag.ui.DefineHandler.applyDefinition(DefineHandler.java:64)
        at com.sun.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:131)
        at com.sun.facelets.impl.DefaultFaceletContext$TemplateManager.apply(DefaultFaceletContext.java:310)
        at com.sun.facelets.impl.DefaultFaceletContext.includeDefinition(DefaultFaceletContext.java:280)
        at com.sun.facelets.tag.ui.InsertHandler.apply(InsertHandler.java:68)
        at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
        at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
        at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
        at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:25)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:248)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:294)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:273)
        at com.sun.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:144)
        at com.sun.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:113)
        at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
        at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:25)
        at com.sun.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:95)
        at com.sun.facelets.FaceletViewHandler.buildView(FaceletViewHandler.java:524)
        at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:567)
        at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
        at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
        at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
        at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
        at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
        at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
        at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)
        at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
        at java.lang.Thread.run(Thread.java:619)

Obrigado!

3 Respostas

R

Em HQL você deve usar atributos, não nomes de tabelas, ao declarar JOIN’s. Acho que a sua consulta ficaria mais ou menos assim:

"select pos " +
"from ProcessoOs pos " +
"  left join fetch pos.ordemServico "  +
"  left join fetch pos.situacao "  +
"where pos.responsavel.id = " + f.getId()   +
" and (pos.situacao.tipo = 'N' or pos.situacao.tipo = null)"  +
" and pos.ordemServico.status = 'P' " +
"order by pos.dataFim, pos.nivel"
Dassayev

Valeu roger_rf. Funcionou!

Agora você poderia tirar outra dúvida minha? Como faço para fazer um subselect nesse hql?

R

Assim:

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/queryhql.html#queryhql-subqueries

Criado 15 de março de 2011
Ultima resposta 15 de mar. de 2011
Respostas 3
Participantes 2