Problema com consulta usando Hibernate

10 respostas
Diego_Adriano

Boa noite galera … Estou com um problema enorme para efetuar uma consulta em HQL … não sei se estou fazendo da forma correta …
Quero que o select me traga apenas os Clientes que estão com a Situação “A” ou seja Ativo…

public List<Cliente> ClientesAtivos(){
		
		System.out.println("REPOSITORY CLIENTES ATIVOS");
		Query query = this.entityManager.createQuery("id,nome,sobrenome,cpf,situacao from Cliente as c where" +
													 " c.situacao = situacao");
		query.setParameter("situacao", "A");
		return query.getResultList();

Porém obtenho essa exception no momento que rodo a aplicação, creio que seja minha consulta que esteja errada …

AVISO: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
java.lang.IllegalArgumentException: node to traverse cannot be null!
	at org.hibernate.hql.ast.util.NodeTraverser.traverseDepthFirst(NodeTraverser.java:63)
	at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:280)
	at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:182)
	at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
	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:98)
	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:1760)
	at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:263)
	at repositorios.ClienteRepository.ClientesAtivos(ClienteRepository.java:45)
	at managedbeans.ClienteBean.getClientesAtivos(ClienteBean.java:80)
	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 javax.el.BeanELResolver.getValue(BeanELResolver.java:302)
	at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:175)
	at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
	at com.sun.el.parser.AstValue.getValue(AstValue.java:116)
	at com.sun.el.parser.AstValue.getValue(AstValue.java:163)
	at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:219)
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:102)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178)
	at javax.faces.component.UIData.getValue(UIData.java:554)
	at javax.faces.component.UIData.getDataModel(UIData.java:1248)
	at javax.faces.component.UIData.getRowCount(UIData.java:339)
	at org.primefaces.component.datatable.DataTable.calculatePage(DataTable.java:769)
	at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:160)
	at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:85)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1620)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848)
	at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:55)
	at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:43)
	at org.primefaces.component.panel.PanelRenderer.encodeContent(PanelRenderer.java:229)
	at org.primefaces.component.panel.PanelRenderer.encodeMarkup(PanelRenderer.java:152)
	at org.primefaces.component.panel.PanelRenderer.encodeEnd(PanelRenderer.java:75)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1620)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:380)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at filtros.JPAFilter.doFilter(JPAFilter.java:29)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at filtros.LoginFilter.doFilter(LoginFilter.java:28)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at filtros.JPAFilter.doFilter(JPAFilter.java:29)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at filtros.LoginFilter.doFilter(LoginFilter.java:28)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
	at java.lang.Thread.run(Thread.java:662)

10 Respostas

romarcio

Senão estou enganado esse trecho " c.situacao = situacao" deveria ser assim “c.situacao = :situacao”
Veja os dois pontos adicionados onde representa o parametro.

rodrigo.ferreira

Faça assim:

Query query = this.entityManager.createQuery("id, nome, sobrenome, cpf, situacao from Cliente as c where" +   
                                                                     " c.situacao = :situacao");   
query.setParameter("situacao", "A");

Note os “:” no parâmetro, dentro da JPQL.

Abraço,

Diego_Adriano

Bem, alterei o codigo como me pediu, agora ele chegou a fazer o select mas deu o seguinte erro:

INFO: Hibernate: 
    /* select
        id,
        nome,
        sobrenome,
        cpf,
        situacao 
    from
        Cliente as c 
    where
        c.situacao =:situacao */ select
            cliente0_.id as col_0_0_,
            cliente0_.nome as col_1_0_,
            cliente0_.sobrenome as col_2_0_,
            cliente0_.cpf as col_3_0_,
            cliente0_.situacao as col_4_0_ 
        from
            Cliente cliente0_ 
        where
            cliente0_.situacao=?
INFO:  2
AVISO: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NumberFormatException: For input string: "id"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
Diego_Adriano

Sem o “select” me trouxe o seguinte erro: Obs nem chegou a fzr o select

GRAVE: line 1:1: unexpected token: id
AVISO: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
java.lang.IllegalArgumentException: node to traverse cannot be null!
J

Tenta assim primeiro, para ver se funciona. Depois posta sua entidade aqui

Query query = this.entityManager.createQuery(" from Cliente as c where" + " c.situacao = situacao");

Diego_Adriano

Agora rodou, me preencheu o datable, mas ele fica chamando o metodo varias vezes, parece que a tela fica sendo rendenizada …

Console

INFO: Hibernate: 
    /* 
from
    Cliente as c 
where
    c.situacao =:situacao */ select
        cliente0_.id as id160_,
        cliente0_.atividades_laser as atividades2_160_,
        cliente0_.cel as cel160_,
        cliente0_.cel_recado as cel4_160_,
        cliente0_.cep as cep160_,
        cliente0_.cidade as cidade160_,
        cliente0_.cpf as cpf160_,
        cliente0_.cpf_resp as cpf8_160_,
        cliente0_.endereco as endereco160_,
        cliente0_.estado as estado160_,
        cliente0_.estado_civil as estado11_160_,
        cliente0_.facebook as facebook160_,
        cliente0_.gmail as gmail160_,
        cliente0_.img_user as img14_160_,
        cliente0_.msn as msn160_,
        cliente0_.nascimento as nascimento160_,
        cliente0_.nome as nome160_,
        cliente0_.numero as numero160_,
        cliente0_.professorID_id as profess26_160_,
        cliente0_.profissao as profissao160_,
        cliente0_.responsavel as respons20_160_,
        cliente0_.rg as rg160_,
        cliente0_.situacao as situacao160_,
        cliente0_.sobrenome as sobrenome160_,
        cliente0_.tel as tel160_,
        cliente0_.tel_recado as tel25_160_ 
    from
        Cliente cliente0_ 
    where
        cliente0_.situacao=?
INFO: Hibernate: 
    /* load modelo.Funcionario */ select
        funcionari0_.id as id174_2_,
        funcionari0_.cel as cel174_2_,
        funcionari0_.cel2 as cel3_174_2_,
        funcionari0_.cep as cep174_2_,
        funcionari0_.cidade as cidade174_2_,
        funcionari0_.cpf as cpf174_2_,
        funcionari0_.cref as cref174_2_,
        funcionari0_.ctps as ctps174_2_,
        funcionari0_.endereco as endereco174_2_,
        funcionari0_.estado as estado174_2_,
        funcionari0_.estado_civil as estado11_174_2_,
        funcionari0_.facebook as facebook174_2_,
        funcionari0_.funcaoID_id as funcaoID24_174_2_,
        funcionari0_.gmail as gmail174_2_,
        funcionari0_.msn as msn174_2_,
        funcionari0_.nascimento as nascimento174_2_,
        funcionari0_.nome as nome174_2_,
        funcionari0_.numero as numero174_2_,
        funcionari0_.pis as pis174_2_,
        funcionari0_.rg as rg174_2_,
        funcionari0_.situacao as situacao174_2_,
        funcionari0_.sobrenome as sobrenome174_2_,
        funcionari0_.tel as tel174_2_,
        funcionari0_.tel_recado as tel23_174_2_,
        funcionari0_.turnoID_id as turnoID25_174_2_,
        funcao1_.id as id172_0_,
        funcao1_.descricao as descricao172_0_,
        funcao1_.nome as nome172_0_,
        turno2_.id as id170_1_,
        turno2_.descricao as descricao170_1_,
        turno2_.inicio as inicio170_1_,
        turno2_.nome as nome170_1_,
        turno2_.termino as termino170_1_ 
    from
        Funcionario funcionari0_ 
    inner join
        Funcao funcao1_ 
            on funcionari0_.funcaoID_id=funcao1_.id 
    inner join
        Turno turno2_ 
            on funcionari0_.turnoID_id=turno2_.id 
    where
        funcionari0_.id=?
alberthy

[b]Normal amigo…

Já que sua datatable está sendo alimentada por esse método. Sempre que utilizar a página o mesmo vai ser chamado.

Abraço.[/b]

Diego_Adriano

Sim sim … sempre que eu chamar a tela o metodo sera chamado para preencher o datatable, porém uma unica vez certo ? no meu caso ele esta parecendo que o metodo esta dentro de um While infinito … Por isso eu disse que parece q ele fica rendenizando a tela …
Abraços

J

Assim, não sei como está seu código. Mas se você está usando for aninhados (for dentro de for) para fazer a busca, o Hibernate tem esse comportamento.

Existe uma annotation no Hibernate chamada BatchSize( ou algo assim). Dá uma procurada e coloque um número igual a 5 pelo menos.

Ele deve diminuir em 5 a quantidade de querys a ser rodadas. Depois posta aqui o resultado

Diego_Adriano

Hum … entendi … vou dar uma procurada nisso … Vou postar o Código
Aqui o xHTML

<p:panel header="Controle de Clientes" style="margin-left:14%; width:60%;text-align:center;">
	  		
	  		<h:form id="controle_clientes">
	  			
	  			<p:dataTable paginator="true"
	  						 paginatorPosition="bottom"
	  						 rows="20"
	  						 value="#{clienteBean.clientesAtivos}"
	  						 var="cliente"
	  						 emptyMessage="Nenhum Cliente encontrado"
	  						 id="tabela">

		
				<p:column headerText="ID" style="width:50px;">
					<p:resizable/>
					<p:cellEditor>
						<f:facet name="output">
							<h:outputText value="#{cliente.id}"/>
						</f:facet>
						<f:facet name="input">		 
							<h:outputText value="#{cliente.id}"/>
						</f:facet>
					</p:cellEditor>					
				</p:column>
				
				<p:column headerText="NOME">
					<p:resizable/>
					<p:cellEditor>
						<f:facet name="output">
							<h:outputText value="#{cliente.nome}"/>
						</f:facet>
						<f:facet name="input">		 
							<h:outputText value="#{cliente.nome}"/>
						</f:facet>
					</p:cellEditor>					
				</p:column>
				
				<p:column headerText="SOBRENOME">
					<p:resizable/>
					<p:cellEditor>
						<f:facet name="output">
							<h:outputText value="#{cliente.sobrenome}"/>
						</f:facet>
						<f:facet name="input">		 
							<h:outputText value="#{cliente.sobrenome}"/>
						</f:facet>
					</p:cellEditor>					
				</p:column>
				
				<p:column headerText="CPF"> 
					<p:resizable/>
					<p:cellEditor>
						<f:facet name="output">
							<h:outputText value="#{cliente.cpf}"/>
						</f:facet>
						<f:facet name="input">		 
							<h:outputText value="#{cliente.cpf}"/>
						</f:facet>
					</p:cellEditor>					
				</p:column>
					
				<p:column headerText="SITUAÇÃO" style="width:50px">
	  			 	<p:resizable/>
					<p:cellEditor>
	  			 		<f:facet name="output">
	  						<h:outputText value="#{cliente.situacao}"/>
	  					</f:facet>
	  					<f:facet name="input">
	  						
	  						<h:selectOneMenu value="#{cliente.situacao}">
	  							<f:selectItem itemLabel="Ativo"   itemValue="A"/>
	  							<f:selectItem itemLabel="Inativo" itemValue="A"/>
	  						</h:selectOneMenu>
	  						
	  					</f:facet>
	  				</p:cellEditor>
	  				</p:column>	
					
				<p:column headerText="Opções" style="width:75px">
					<p:rowEditor/>
				</p:column>
			
				</p:dataTable>				 
	  			
	  		</h:form>
	  	
	  	</p:panel>

Aqui o meu Bean

public List<Cliente> getClientesAtivos() {
		System.out.println("CLIENTES ATIVOS");
ClienteRepository repository = new ClienteRepository(this.entityManager);
		this.clientesAtivos = repository.ClientesAtivos();
		System.out.println(" " + clientesAtivos.size());
		
		return this.clientesAtivos;
		
}

Aqui Meu Repository

/************************************************************************************/
					//LISTA ATIVOS
	/************************************************************************************/
	public List<Cliente> ClientesAtivos(){
		
		System.out.println("REPOSITORY CLIENTES ATIVOS");
		Query query = this.entityManager.createQuery("from Cliente as c where" +
													 " c.situacao =:situacao");
		//System.out.println("SITACAO: "+" "+ cliente.getSituacao());
		query.setParameter("situacao", "A");
		return query.getResultList();
	}
Criado 3 de maio de 2011
Ultima resposta 5 de mai. de 2011
Respostas 10
Participantes 5