Problema com Hibernate

olá pessoal

estou com um problema com o hibernate, tenho a seguinte estrutura

cidade
-id
-nome

  • microregiao

MicroRegiao

  • id
  • nome
  • mesoregiao

Mesoregiao

  • id
  • nome
  • estado

Estado

  • id
  • nome

preciso listar as cidades de um determinado estado, estou fazendo assim

List l = this.session.createCriteria(Municipio.class).add(
				Restrictions.eq("nome", municipio.getNome())).add(
				Restrictions.eq("microregiao.mesoregiao.estado", municipio.getMicroregiao().getMesoregiao().getEstado())).list();

mas não dá certo tenho que fazer algum tipo de mapeamento? ou usar hql?

tentei com hql assim

this.session.createQuery("from Municipio as Municipio where Municipio.microregiao.mesoregiao.estado.id = "
+ municipio.getMicroregiao().getMesoregiao().getEstado().getId()+ " and Municipio.nome= '"+ municipio.getNome() + "'").list();

mas também não funcionou, alguém pode me ajudar?

vlw

Me desculpe mas, vc tem que dar uma volta danada para encontrar o estado a partir de um municipio heim?

Nao vejo pq vc não possa fazer

municipio.getMicroregiao() municipio.getMesoregiao() municipio.getEstado()

seria algo como

Class Municipio { Microregiao getMicroregiao(){ return this.microregiao; } Mesoregiao getMesoregiao() {return this.microregiao.getMesoregiao(); } Estado getEstado() {return this.getMesoregiao().getEstado(); } }

Bastaria vc ter gets inteligentes, não get/set gerado automagicamente.

Quanto ao seu problema, seria bom informar mais detalhes, tipo qual erro vc encontra, etc.

peczenyj vçw pela dica, vou implementar

o erro que acontece é:

04/06/2010 14:29:59 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet default threw exception
br.com.caelum.vraptor.InterceptionException: org.hibernate.QueryException: could not resolve property: microregiao.mesoregiao.estado of: smcv.modelo.territorio.Municipio
	at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:77)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
	at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.util.hibernate.HibernateTransactionInterceptor.intercept(HibernateTransactionInterceptor.java:45)
	at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
	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.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(Unknown Source)
Caused by: org.hibernate.QueryException: could not resolve property: microregiao.mesoregiao.estado of: smcv.modelo.territorio.Municipio
	at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:67)
	at org.hibernate.persister.entity.AbstractPropertyMapping.toColumns(AbstractPropertyMapping.java:82)
	at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:54)
	at org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1367)
	at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:457)
	at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumnsUsingProjection(CriteriaQueryTranslator.java:417)
	at org.hibernate.criterion.SimpleExpression.toSqlString(SimpleExpression.java:68)
	at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:357)
	at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:113)
	at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:82)
	at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:91)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1578)
	at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306)
	at smcv.dao.territorio.MunicipioDao.adicionar(MunicipioDao.java:32)
	at smcv.controller.MunicipioController.adicionar(MunicipioController.java:63)
	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 br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:50)
	... 40 more
04/06/2010 14:52:08 org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started

alguém pode me ajudar a “converter” esse código sql para hql ?

select * from municipio m where exists(
SELECT id FROM MICROREGIAO mr where exists(
SELECT id FROM MESOREGIAO msr WHERE ESTADO_ID=‘35’ and msr.id=mr.mesoregiao_id) and m.microregiao_id=mr.id) and nome=‘X’

ele funciona do modo que eu quero.

obrigado.