Retornar um double através de um getSingleResult

4 respostas
Nabas

Olá pessoal

Estou com o seguinte problema
Meu DAO possui um metodo que faz um select SUM e precisa retornar um double

public double getSomaPrevisoesPendentes(int codCentroOrc, short codProgramaGerencial, short codSubProgramaGerencial, 
           short codProjetoAtividadeGerencial, short codElementoEconomico, short codItemElementoEconomico, 
           String dataIni, String dataFim, String dataPrevistaEmpenhamentoIni, String dataPrevistaEmpenhamentoFim) {
        
        StringBuffer strQL = new StringBuffer();
        strQL.append("SELECT sum(prev.valor) FROM Previsao prev " );
        strQL.append(" WHERE prev.codCentroOrc = :cO " );
        strQL.append("   AND prev.codProgramaGerencial = :progGer " );
        strQL.append("   AND prev.codSubProgramaGerencial = :subProgGer " );
        strQL.append("   AND prev.codProjetoAtividadeGerencial = :projAtivGer " );
        strQL.append("   AND prev.codElementoEconomico = :elemEcon " );
        strQL.append("   AND prev.codItemElementoEconomico = :itElemEcon " );
        strQL.append("   AND prev.status = 1 " ); //criar constante
        strQL.append("   AND prev.data BETWEEN :dIni AND :dFim " );
        strQL.append("   AND prev.dataPrevistaEmpenhamento BETWEEN :dPrevEmpIni AND :dPrevEmpFim ");
        
        Query q = em.createQuery(strQL.toString());
        q.setParameter("cO", codCentroOrc);
        q.setParameter("progGer", codProgramaGerencial);
        q.setParameter("subProgGer", codSubProgramaGerencial);
        q.setParameter("projAtivGer", codProjetoAtividadeGerencial);
        q.setParameter("elemEcon", codElementoEconomico);
        q.setParameter("itElemEcon", codItemElementoEconomico);
        q.setParameter("dIni", dataIni);
        q.setParameter("dFim", dataFim);
        q.setParameter("dPrevEmpIni", dataPrevistaEmpenhamentoIni);
        q.setParameter("dPrevEmpFim", dataPrevistaEmpenhamentoFim);
        
        return  double.class.cast(q.getSingleResult());
    }

Ja tentei o cast dessa forma q esta no codigo como tb o cast pela classe (Double) mas não estou conseguindo. O erro q dá é o seguinte:

Exception in thread "main" javax.ejb.EJBException: java.lang.ClassCastException: java.lang.Integer
        at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:69)
        at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83)
        at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:197)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:78)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:227)
        at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
        at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
        at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:828)
        at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:681)
        at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:358)
        at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:398)
        at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:239)
Caused by: java.lang.ClassCastException: java.lang.Integer
        at org.hibernate.type.ShortType.set(ShortType.java:40)
        at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:83)
        at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:65)
        at org.hibernate.loader.hql.QueryLoader.bindNamedParameters(QueryLoader.java:515)
        at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1577)
        at org.hibernate.loader.Loader.doQuery(Loader.java:661)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
        at org.hibernate.loader.Loader.doList(Loader.java:2145)
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
        at org.hibernate.loader.Loader.list(Loader.java:2024)
        at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:392)
        at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:333)
        at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
        at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1114)
        at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
        at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:53)
        at br.unicamp.ccuec.simo.persistence.dao.PrevisaoFacade.getSomaPrevisoesPendentes(PrevisaoFacade.java:101)
        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:585)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
        at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
        at br.unicamp.ccuec.simo.persistence.security.LogInterceptor.profile(LogInterceptor.java:57)
        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:585)
        at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:118)
        at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
        at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:197)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:78)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:227)
        at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
        at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
        at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:828)
        at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:681)
        at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:358)
        at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:398)
        at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:239)
        at org.jboss.remoting.RemoteClientInvoker.invoke(RemoteClientInvoker.java:190)
        at org.jboss.remoting.Client.invoke(Client.java:525)
        at org.jboss.remoting.Client.invoke(Client.java:488)
        at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:55)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:55)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:78)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:102)
        at $Proxy0.getSomaPrevisoesPendentes(Unknown Source)
        at br.unicamp.ccuec.simo.test.persistence.dao.testDaoPrevisao.testSQLPrevisao(testDaoPrevisao.java:51)
        at br.unicamp.ccuec.simo.test.persistence.dao.testDaoPrevisao.main(testDaoPrevisao.java:36)
Java Result: 1

Alguem poderia me ajudar com essa questão… é estranho… em nenhum momento tentei fazer um cast com Integer como esta descrito no erro

Valeu

4 Respostas

T

Credo! Use algo parecido com isto:

return ((Number)(q.getSingleResult())).dblValue();

Nunca vi ninguém usando esse método “cast” da classe java.lang.Class. Isso é novidade para mim.

Nabas

fiz da forma como vc disse mas mesmo assim da o mesmo erro

Exception in thread “main” javax.ejb.EJBException: java.lang.ClassCastException: java.lang.Integer

T

Você podia ser camarada e dizer como é a declaração desse método getSingleResult() ? Eu dei a sugestão, mas “meio no escuro”.

T

Você deve ter tido algum problema de deploy, já que getSingleResult volta um Object, e pela sua mensagem anterior, esse objeto é um java.lang.Integer, que é um java.lang.Number, portanto tem um método chamado dblValue() que converte o Integer para Double.

Criado 5 de dezembro de 2006
Ultima resposta 5 de dez. de 2006
Respostas 4
Participantes 2