Dificuldades com HQL

Boa tarde galera!
Estou começando com HQL, dei uma lida e vi alguns exemplos e estou com dificuldades para transformar essa SQL em HQL:

SELECT * FROM tabela as A INNER join tabela_produto on tabela_produto.pro_cod='9999' and tabela_produto.tab_id = A.tab_id WHERE A.est_id = '11' OR A.est_id = '22' OR A.est_id = '33' or exists(select pes_id from cliente where cliente.pes_id = A.cli_id and cliente.ven_id = '1')

O parametro ‘9999’ será um objeto do tipo Produto, o parametro ‘1’ será um objeto do tipo Vendedor e os parametros ‘11’ ‘22’ ‘33’ é uma List
O retorno que eu preciso ter é uma List (que é da tabela ‘tabela’)…

To apanhando aqui e continuando a tentar fazer…
Quem estiver disponivel em dar uma ajudinha, agradeço bastante! :smiley:

Abraçoo!

Aqui mostra como fazer: JPA Consultas e Dicas.

Então, eu dei uma olhada geral…

Olha o que tentei:

public List<Tabela> getTabelas(Produto produto, List<Estado> estados, Vendedor vendedor){ currentSession = HibernateUtil.getSessionFactory().getCurrentSession(); Query query = currentSession.createQuery("from tabela as A inner join tabela_produto on tabela_produto.pro_cod=:p and tabela_produto.tab_id = A.tab_id WHERE (:e:) or exists(select pes_id from cliente where cliente.pes_id = A.cli_id and cliente.ven_id=:v)"); query.setParameter("p", produto); query.setParameter("e", estados); query.setParameter("v", vendedor); return query.list(); }

Erro:

SEVERE: line 1:44: unexpected token: on SEVERE: line 1:119: unexpected token: : WARNING: processEqualityExpression() : No expression to process! WARNING: processEqualityExpression() : No expression to process! INFO: javax.el.ELException: /vendas/Produtos.xhtml @15,225 selection="#{produtosBean.selectedProduto}": org.hibernate.hql.ast.QuerySyntaxException: unexpected token: on near line 1, column 44 [from tabela as A inner join tabela_produto on tabela_produto.pro_cod=:p and tabela_produto.tab_id = A.tab_id WHERE (:e:) or exists(select pes_id from cliente where cliente.pes_id = A.cli_id and cliente.ven_id=:v)] javax.el.ELException: /vendas/Produtos.xhtml @15,225 selection="#{produtosBean.selectedProduto}": org.hibernate.hql.ast.QuerySyntaxException: unexpected token: on near line 1, column 44 [from tabela as A inner join tabela_produto on tabela_produto.pro_cod=:p and tabela_produto.tab_id = A.tab_id WHERE (:e:) or exists(select pes_id from cliente where cliente.pes_id = A.cli_id and cliente.ven_id=:v)] at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:139) at org.primefaces.component.datatable.DataTable.processUpdates(DataTable.java:475) at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:510) at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183) at org.primefaces.component.api.UIData.visitTree(UIData.java:635) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) at javax.faces.component.UIForm.visitTree(UIForm.java:344) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:376) at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:252) at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183) at javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:1229) at com.sun.faces.lifecycle.UpdateModelValuesPhase.execute(UpdateModelValuesPhase.java:78) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217) at br.com.zanzini.filter.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:17) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) at com.sun.grizzly.ContextTask.run(ContextTask.java:71) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:722) Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: on near line 1, column 44 [from tabela as A inner join tabela_produto on tabela_produto.pro_cod=:p and tabela_produto.tab_id = A.tab_id WHERE (:e:) or exists(select pes_id from cliente where cliente.pes_id = A.cli_id and cliente.ven_id=:v)] at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:31) at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:24) at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59) at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:258) at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:157) at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111) at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77) at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56) at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72) at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133) at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112) at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301) at $Proxy150.createQuery(Unknown Source) at br.com.zanzini.dao.ProdutoDao.getTabelas(ProdutoDao.java:63) at br.com.zanzini.bean.ProdutosBean.setSelectedProduto(ProdutosBean.java:78) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at javax.el.BeanELResolver.setValue(BeanELResolver.java:442) at com.sun.faces.el.DemuxCompositeELResolver._setValue(DemuxCompositeELResolver.java:255) at com.sun.faces.el.DemuxCompositeELResolver.setValue(DemuxCompositeELResolver.java:281) at com.sun.el.parser.AstValue.setValue(AstValue.java:217) at com.sun.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:291) at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:131) ... 48 more

O código SQL roda normalmente… o problema ta no HQL mesmo…

Então não leia geral, estude.

HQL != SQL.

Não é a mesma sintaxe.

esses dias tive este problema… tive que criar um objeto dentro do meu HQL
Como o hebert disse, no blog dele explica certinho como fazer…
Abraço

public List<Tabela> getTabelas(Produto produto, List<Estado> estados, Vendedor vendedor){ currentSession = HibernateUtil.getSessionFactory().getCurrentSession(); Query query = currentSession.createQuery("from br.com.a.entity.Tabela T inner join br.com.a.entity.TabelaProduto TP on TP.pro_cod=:p and TP.tab_id = T.tab_id WHERE T.est_id in (:e) or exists(select pes_id from br.com.a.entity.Cliente C where C.pes_id = T.cli_id and C.ven_id=:v)"); query.setParameter("p", produto); query.setParameterList("e", estados); query.setParameter("v", vendedor); return query.list(); }

O que estou fazendo de errado?

Olá,

Seria legal você postar qual a funcionalidade que você está tentando implementar.

Se possível poste também o código das classes envolvidas: Tabela, TabelaProduto, Cliente, Estado, para que possamos verificar se o mapeamento objeto relacional está correto.

[quote=faelzindc] public List<Tabela> getTabelas(Produto produto, List<Estado> estados, Vendedor vendedor){ currentSession = HibernateUtil.getSessionFactory().getCurrentSession(); Query query = currentSession.createQuery("from br.com.a.entity.Tabela T inner join br.com.a.entity.TabelaProduto TP on TP.pro_cod=:p and TP.tab_id = T.tab_id WHERE T.est_id in (:e) or exists(select pes_id from br.com.a.entity.Cliente C where C.pes_id = T.cli_id and C.ven_id=:v)"); query.setParameter("p", produto); query.setParameterList("e", estados); query.setParameter("v", vendedor); return query.list(); }

O que estou fazendo de errado?[/quote]Lá mostra como fazer join… se vc tivesse pelo menos lido e entendido… =/