Enum + Vraptor + busca - erro de cast. [RESOLVIDO]

3 respostas
well

Me sinto mal em saber que não estou conseguindo resolver um erro de cast, ou de busca. por isso estou aqui para pedir ajuda a vcs :slight_smile:

Tenho uma classe consulta, com alguns campos e em enum status, quando cadastro uma consulta automaticamente o status fica como aberto. com isso preciso fazer uma query que busque por status: aberto, cancelado etc. fiz normalmente assim:

Modelo

@Enumerated(EnumType.STRING)
	private Status status;

DAO

@SuppressWarnings("unchecked")
	public List<Consulta> buscaPorStatus(String status) {
		Session session = (Session) em.getDelegate();
		return session.createCriteria(Consulta.class)
				.add(Restrictions.like("status", status, MatchMode.ANYWHERE))
				.list();
	}

controller

@Get
	@Path("/consulta/busca-por-status")
	public List<Consulta> buscaPorStatus(String status) {
		result.include("status", status);
		return dao.buscaPorStatus(status);

	}

html

<form  action="<c:url value="/consulta/busca-por-status"/>">
						<input class="buscas" id="buscaPorStatus" name="status" size="30"/>// vou mudar isso para um combobox 
					</form>

ERRO

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Enum
	br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:87)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)

root cause

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Enum
	org.hibernate.type.EnumType.nullSafeSet(EnumType.java:148)
	org.hibernate.type.CustomType.nullSafeSet(CustomType.java:183)
	org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1769)
	org.hibernate.loader.Loader.bindParameterValues(Loader.java:1740)
	org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1612)
	org.hibernate.loader.Loader.doQuery(Loader.java:717)
	org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270)
	org.hibernate.loader.Loader.doList(Loader.java:2294)
	org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2172)
	org.hibernate.loader.Loader.list(Loader.java:2167)
	org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:119)
	org.hibernate.impl.SessionImpl.list(SessionImpl.java:1706)
	org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)
	br.com.dental.DAO.ConsultaDAO.buscaPorStatus(ConsultaDAO.java:50)
	br.com.dental.controller.ConsultasController.buscaPorStatus(ConsultasController.java:69)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:87)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.22 logs.

Sei que o erro é de CAST mas não consegui resolver… Obrigado a todos…

3 Respostas

Hebert_Coelho

Ao invés de passar String no parametro, passe o Enum
de buscaPorStatus(String status) troque para buscaPorStatus(Status status)

well

Quando vc respondeu eu pensei… q cacete, o cara matou de primeira… e eu estava horas aqui… vlw mesmo muito obrigado…

Hebert_Coelho

Sem brema mano. [=

Criado 13 de janeiro de 2012
Ultima resposta 13 de jan. de 2012
Respostas 3
Participantes 2