Duvida sobre uma consulta usando Hibernate

6 respostas
hibernate
Dayson_Rodrigues

estou fazendo uma consulta, onde pego o intervalo de 2 datas com uma placa de um veiculo, só que na hora da minha consulta, estou com erro.

Meu Erro:

java.lang.IllegalArgumentException: Unable to locate parameter registered with that name [diaServicoInicial]
	at org.hibernate.jpa.criteria.compile.CriteriaQueryTypeQueryAdapter.locateParameterByName(CriteriaQueryTypeQueryAdapter.java:201)
	at org.hibernate.jpa.criteria.compile.CriteriaQueryTypeQueryAdapter.setParameter(CriteriaQueryTypeQueryAdapter.java:225)
	at com.irmaosuspension.controleservico.dao.ServicoDAO.buscarServicoDeVeiculoEntreDatas(ServicoDAO.java:106)
	at com.irmaosuspension.controleservico.dao.ServicoDAO$Proxy$_$$_WeldSubclass.buscarServicoDeVeiculoEntreDatas(Unknown Source)
	at com.irmaosuspension.controleservico.service.ServicoService.buscarServicoEntreDatasPorPlaca(ServicoService.java:49)
	at com.irmaosuspension.controleservico.controller.ConsultaServico.buscaServicoDeVeiculoEntreDatasPorPlaca(ConsultaServico.java:70)
	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 org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
	at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	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:230)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:495)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:767)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1347)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)

6 Respostas

Lucas_Camara

Posta o código da consulta pra gente ver.

Dayson_Rodrigues
public List<Servico> buscarServicoDeVeiculoEntreDatas(Date diaServicoInicial, Date diaServicoFinal, Carro carro) {

	CriteriaBuilder builder = manager.getCriteriaBuilder();
	CriteriaQuery<Servico> criteriaQuery = builder.createQuery(Servico.class);

	Root<Servico> s = criteriaQuery.from(Servico.class);
	criteriaQuery.select(s);

	// Lista de Where, chamamos de predicate.
	List<Predicate> predicates = new ArrayList<>();

	if (diaServicoInicial != null && diaServicoFinal != null) {
		predicates.add(builder.between(s.<Date>get("diaServico"), diaServicoInicial, diaServicoFinal));
	}

	if (carro != null) {
		Expression<Carro> carroExpression = builder.parameter(Carro.class, "carro");
		predicates.add(builder.equal(s.get("carro").get("placa"), carroExpression));
	}

	// adiciona todos os predicados em Array
	criteriaQuery.where(predicates.toArray(new Predicate[0]));

	TypedQuery<Servico> query = manager.createQuery(criteriaQuery);

	if (diaServicoInicial != null) {
		query.setParameter("diaServicoInicial", diaServicoInicial);
	}
	if (diaServicoFinal != null) {
		query.setParameter("diaServicoFinal", diaServicoFinal);
	}
	if (carro != null) {
		query.setParameter("carro", carro);
	}
	return query.getResultList();

}
Lucas_Camara

To achando que esse builder.between elimina a necessidade do query.setParameter. Tente comentar o setParameter para diaServidoInicial e diaServicoFinal para ver se funciona.

Dayson_Rodrigues

fiz, mesmo jeito! tô na duvida sobre esse locate

Dayson_Rodrigues

Tentando em fazer em JPQL:

return manager.createQuery("SELECT s FROM Servico s WHERE diaServico BETWEEN :diaInicial AND :diaFinal AND s.carro.placa = :placaVeiculo", Servico.class)

.setParameter("diaInicial", diaServicoInicial)
.setParameter("diaFinal", diaServicoFinal)
.setParameter("placaVeiculo", carro.getPlaca()).getResultList();
}

é assim?

Lucas_Camara

Sim. Apenas corrija o where. Em vez de diaServico, mude para s.diaServico.

Criado 29 de junho de 2017
Ultima resposta 30 de jun. de 2017
Respostas 6
Participantes 2