[ Hibernate + VRaptor ] handle de instrução não foi executado

Olá gujeiros.

Estou com uma aplicação com VRaptor e Hibernate e após uma série de mudanças na infra do sistema como atualização do hibernate, do vraptor e na gestão das sessões encontrei problemas em algumas consultas que antes funcionavam.

O método abaixo faz uma consulta createQuery sobre um hql com counts que retorna, apenas, algumas colunas.
Percorro ele e distribuo as colunas em atributos de um objeto temporário.

@SuppressWarnings("rawtypes")
	public List<CentroCusto> listarCentroCustoS() {
		List<CentroCusto> centroCustoS = new ArrayList<CentroCusto>();
		CentroCusto centroCusto;
		String sql	= "SELECT cc.cod_centro_custo, UPPER(cc.descricao), cc.cod_grupo_pc FROM CentroCusto cc WHERE cc.cod_grupo_pc <> 2 GROUP BY cc.cod_centro_custo, cc.descricao, cc.cod_grupo_pc ORDER BY cc.descricao";
		Query query = session.oracleSession().createQuery(sql);
		Iterator it = query.iterate();
		while ( it.hasNext() ) {
			centroCusto = new CentroCusto();
			Object[] row = (Object[]) it.next();
			centroCusto.setCod_centro_custo((Long)row[0]);
			centroCusto.setDescricao((String)row[1]);
			centroCusto.setCod_grupo_pc((Long)row[2]);
			centroCusto.setGrupoPc((GrupoPc)session.oracleSession().load(GrupoPc.class, (Long)row[2]));
			centroCustoS.add(centroCusto);
		}
		return centroCustoS;
	}

A consulta está gerando o seguinte Erro:

 select
        centrocust0_.cod_centro_custo as col_0_0_,
        upper(centrocust0_.descricao) as col_1_0_,
        centrocust0_.cod_grupo_pc as col_2_0_ 
    from
        NBS.CENTRO_CUSTO centrocust0_ 
    where
        centrocust0_.cod_grupo_pc<>2 
    group by
        centrocust0_.cod_centro_custo ,
        centrocust0_.descricao ,
        centrocust0_.cod_grupo_pc 
    order by
        centrocust0_.descricao
[19/40/2011 05:40]  WARN [http-bio-8080-exec-3] (JDBCExceptionReporter.java:233) - SQL Error: 17144, SQLState: null
[19/40/2011 05:40] ERROR [http-bio-8080-exec-3] (JDBCExceptionReporter.java:234) - handle de instrução não foi executado
19/10/2011 17:41:05 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [default] in context with path [/epico] threw exception
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: org.hibernate.exception.GenericJDBCException: could not get next iterator result
	at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.brabus.epico.interceptor.AdmScope.intercept(AdmScope.java:34)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.brabus.epico.interceptor.AdmRotina.intercept(AdmRotina.java:26)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)
	

Aguem saberia como ajudar?

Abraços,
Jsign

Pessoal, a consulta retorna mais de 200 linhas quando executada no banco (select …) mas o hibernate informa “could not get next iterator result” na primeira volta do laço.
Não usei criteria neste caso porque não consegui montar um para a consulta que preciso. Alguém sabe o que pode estar ocorrendo?
É possível executar esta mesma consulta via “createCriteria”, ou seja sem usar o hql retornando objetos mesmo usando SUM, COUNT … ?
Valeu.
Abraços,
Jsign

tenta trocar o createQuery por createNativeQuery (ou createSQLQuery)

e dá pra usar sum e count sim na criteria… é na parte de projections

Olá Lucas, gujeiros.
Não consegui implementar antes por conta de um desenv. de ultima hora. Usei projections e deu certo.
A diferença é que me retorna um Object ao invéz de um objeto persistente (Entity), no caso “TotalizadorMensal”.

@SuppressWarnings("unchecked")
		List<Object> totalizadorMensalS = SessionS.current().oracleSession().createCriteria(TotalizadorMensal.class)
		.add(Restrictions.eq("cod_empresa", cod_empresa))
    	.setProjection( Projections.projectionList()
	        .add( Projections.groupProperty("cod_grupo_pc"), "cod_grupo_pc" )
	        .add( Projections.groupProperty("cod_centro_custo"), "cod_centro_custo" )
    	)
	    .addOrder( Order.desc("cod_grupo_pc") )
	    .addOrder( Order.desc("cod_centro_custo") )
	    .list();

Se eu quizer que retorne uma lista de “TotalizadorMensal.class” tem como?
De qualquer forma vou colocar o post como resolvido, que de fato foi.
Valeu mesmo.
Abraços,
JSign

então, qdo vc faz uma projeção com vários elementos ele retorna uma List<Object[]> por padrão, e dá pra mudar isso chamando o método .setResultTransformer… se eu não me engano tem um chamado aliasToEntity ou alguma coisa do tipo, daí vc dá como alias o nome do atributo que vc quer setar.