Usando funcões de arredondamento do HQL com uso do operador new

0 respostas
wescleyfcosta

A minha query hql retorna uma lista de um objeto de certo tipo, sendo que um de seus atributos é a somatória de mensalidades dividida pelas parcelas.
Durante os testes verifiquei um problema de arredondamento durante a conta e então resolvi usar a função trunc do hql para arrendondar.
Acontece que quando eu a uso dentro do sum, o Hibernate parece nào encontrar um constrututor correspondente para o objeto, dando um Nullpointerexception

select new Mensalidade('Valor da Mensalidade',s,sum(trunc(r.valorTotal/r.numeroParcelasSugerido,2))
FROM Curso c
        JOIN  c.series s
        JOIN  s.receitaSerie r
        JOIN  r.contaContabil cc
        WHERE c.status.id = 1
        AND s.unidadeEnsino.inativa = false
        AND cc.codigo like :contaContabilCodigo
        AND cc.inativa = false
        AND s.unidadeEnsino = :unidadeEnsino
        AND s.periodoLetivo = :periodoLetivo
        AND c = :curso
        GROUP BY s
        ORDER BY s.nome

Ai resolvi não criar mais o Objeto diretamente e retornei apenas uma lista de Object[] conforme a query abaixo

select 'Valor da Mensalidade',s,sum(trunc(r.valorTotal/r.numeroParcelasSugerido,2))  
       FROM Curso c 
        JOIN  c.series s
        JOIN  s.receitaSerie r
        JOIN  r.contaContabil cc
        WHERE c.status.id = 1
        AND s.unidadeEnsino.inativa = false
        AND cc.codigo like :contaContabilCodigo
        AND cc.inativa = false
        AND s.unidadeEnsino = :unidadeEnsino
        AND s.periodoLetivo = :periodoLetivo
        AND c = :curso
        GROUP BY s
        ORDER BY s.nome

Mesmo assim, foi retornado um erro satanico, que desconfio ter sido o motivo do nullpointerexception do primeiro caso.
A pergunta que fica é: Seria possível usar uma função para arredondamento como o trunc (eu vi no manula do hibernate e ela existe lá)?

Erro retornado:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'DisciplinaModel' defined in class path resource [br/com/ultramax/gestaoescolar/core/model/modelContext.xml]: Cannot resolve reference to bean 'transactionManager' while setting bean property 'transactionManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [br/com/ultramax/gestaoescolar/core/coreContext.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [br/com/ultramax/gestaoescolar/core/coreContext.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.AggregateNode 
 \-[AGGREGATE] AggregateNode: 'sum'
    \-[METHOD_CALL] MethodNode: '('
       +-[METHOD_NAME] IdentNode: 'trunc' {originalText=trunc}
       \-[EXPR_LIST] SqlNode: 'exprList'
          +-[DIV] BinaryArithmeticOperatorNode: '/' {dataType=org.hibernate.type.DoubleType@1669521}
          |  +-[DOT] DotNode: 'configurac3_.cre_valorTotal' {propertyName=valorTotal,dereferenceType=4,propertyPath=valorTotal,path=r.valorTotal,tableAlias=configurac3_,className=br.com.ultramax.gestaoescolar.core.domain.ConfiguracaoReceita,classAlias=r}
          |  |  +-[ALIAS_REF] IdentNode: 'configurac3_.cre_ID' {alias=r, className=br.com.ultramax.gestaoescolar.core.domain.ConfiguracaoReceita, tableAlias=configurac3_}
          |  |  \-[IDENT] IdentNode: 'valorTotal' {originalText=valorTotal}
          |  \-[DOT] DotNode: 'configurac3_.cre_numeroParcelasSugerido' {propertyName=numeroParcelasSugerido,dereferenceType=4,propertyPath=numeroParcelasSugerido,path=r.numeroParcelasSugerido,tableAlias=configurac3_,className=br.com.ultramax.gestaoescolar.core.domain.ConfiguracaoReceita,classAlias=r}
          |     +-[ALIAS_REF] IdentNode: 'configurac3_.cre_ID' {alias=r, className=br.com.ultramax.gestaoescolar.core.domain.ConfiguracaoReceita, tableAlias=configurac3_}
          |     \-[IDENT] IdentNode: 'numeroParcelasSugerido' {originalText=numeroParcelasSugerido}
          \-[NUM_INT] LiteralNode: '2'

	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1245)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:880)
	at br.com.ultramax.gestaoescolar.core.test.TestUtil.getBean(TestUtil.java:213)
	at br.com.ultramax.gestaoescolar.core.test.report.MensalidadeReportModelTest.setUp(MensalidadeReportModelTest.java:484)
	at junit.framework.TestCase.runBare(TestCase.java:128)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:120)
	at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [br/com/ultramax/gestaoescolar/core/coreContext.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [br/com/ultramax/gestaoescolar/core/coreContext.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.AggregateNode 
 \-[AGGREGATE] AggregateNode: 'sum'
    \-[METHOD_CALL] MethodNode: '('
       +-[METHOD_NAME] IdentNode: 'trunc' {originalText=trunc}
       \-[EXPR_LIST] SqlNode: 'exprList'
          +-[DIV] BinaryArithmeticOperatorNode: '/' {dataType=org.hibernate.type.DoubleType@1669521}
          |  +-[DOT] DotNode: 'configurac3_.cre_valorTotal' {propertyName=valorTotal,dereferenceType=4,propertyPath=valorTotal,path=r.valorTotal,tableAlias=configurac3_,className=br.com.ultramax.gestaoescolar.core.domain.ConfiguracaoReceita,classAlias=r}
          |  |  +-[ALIAS_REF] IdentNode: 'configurac3_.cre_ID' {alias=r, className=br.com.ultramax.gestaoescolar.core.domain.ConfiguracaoReceita, tableAlias=configurac3_}
          |  |  \-[IDENT] IdentNode: 'valorTotal' {originalText=valorTotal}
          |  \-[DOT] DotNode: 'configurac3_.cre_numeroParcelasSugerido' {propertyName=numeroParcelasSugerido,dereferenceType=4,propertyPath=numeroParcelasSugerido,path=r.numeroParcelasSugerido,tableAlias=configurac3_,className=br.com.ultramax.gestaoescolar.core.domain.ConfiguracaoReceita,classAlias=r}
          |     +-[ALIAS_REF] IdentNode: 'configurac3_.cre_ID' {alias=r, className=br.com.ultramax.gestaoescolar.core.domain.ConfiguracaoReceita, tableAlias=configurac3_}
          |     \-[IDENT] IdentNode: 'numeroParcelasSugerido' {originalText=numeroParcelasSugerido}
          \-[NUM_INT] LiteralNode: '2'

	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1245)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269)
	... 26 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [br/com/ultramax/gestaoescolar/core/coreContext.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.AggregateNode 
 \-[AGGREGATE] AggregateNode: 'sum'
    \-[METHOD_CALL] MethodNode: '('
       +-[METHOD_NAME] IdentNode: 'trunc' {originalText=trunc}
       \-[EXPR_LIST] SqlNode: 'exprList'
          +-[DIV] BinaryArithmeticOperatorNode: '/' {dataType=org.hibernate.type.DoubleType@1669521}
          |  +-[DOT] DotNode: 'configurac3_.cre_valorTotal' {propertyName=valorTotal,dereferenceType=4,propertyPath=valorTotal,path=r.valorTotal,tableAlias=configurac3_,className=br.com.ultramax.gestaoescolar.core.domain.ConfiguracaoReceita,classAlias=r}
          |  |  +-[ALIAS_REF] IdentNode: 'configurac3_.cre_ID' {alias=r, className=br.com.ultramax.gestaoescolar.core.domain.ConfiguracaoReceita, tableAlias=configurac3_}
          |  |  \-[IDENT] IdentNode: 'valorTotal' {originalText=valorTotal}
          |  \-[DOT] DotNode: 'configurac3_.cre_numeroParcelasSugerido' {propertyName=numeroParcelasSugerido,dereferenceType=4,propertyPath=numeroParcelasSugerido,path=r.numeroParcelasSugerido,tableAlias=configurac3_,className=br.com.ultramax.gestaoescolar.core.domain.ConfiguracaoReceita,classAlias=r}
          |     +-[ALIAS_REF] IdentNode: 'configurac3_.cre_ID' {alias=r, className=br.com.ultramax.gestaoescolar.core.domain.ConfiguracaoReceita, tableAlias=configurac3_}
          |     \-[IDENT] IdentNode: 'numeroParcelasSugerido' {originalText=numeroParcelasSugerido}
          \-[NUM_INT] LiteralNode: '2'

	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269)
	... 39 more
Caused by: java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.AggregateNode 
 \-[AGGREGATE] AggregateNode: 'sum'
    \-[METHOD_CALL] MethodNode: '('
       +-[METHOD_NAME] IdentNode: 'trunc' {originalText=trunc}
       \-[EXPR_LIST] SqlNode: 'exprList'
          +-[DIV] BinaryArithmeticOperatorNode: '/' {dataType=org.hibernate.type.DoubleType@1669521}
          |  +-[DOT] DotNode: 'configurac3_.cre_valorTotal' {propertyName=valorTotal,dereferenceType=4,propertyPath=valorTotal,path=r.valorTotal,tableAlias=configurac3_,className=br.com.ultramax.gestaoescolar.core.domain.ConfiguracaoReceita,classAlias=r}
          |  |  +-[ALIAS_REF] IdentNode: 'configurac3_.cre_ID' {alias=r, className=br.com.ultramax.gestaoescolar.core.domain.ConfiguracaoReceita, tableAlias=configurac3_}
          |  |  \-[IDENT] IdentNode: 'valorTotal' {originalText=valorTotal}
          |  \-[DOT] DotNode: 'configurac3_.cre_numeroParcelasSugerido' {propertyName=numeroParcelasSugerido,dereferenceType=4,propertyPath=numeroParcelasSugerido,path=r.numeroParcelasSugerido,tableAlias=configurac3_,className=br.com.ultramax.gestaoescolar.core.domain.ConfiguracaoReceita,classAlias=r}
          |     +-[ALIAS_REF] IdentNode: 'configurac3_.cre_ID' {alias=r, className=br.com.ultramax.gestaoescolar.core.domain.ConfiguracaoReceita, tableAlias=configurac3_}
          |     \-[IDENT] IdentNode: 'numeroParcelasSugerido' {originalText=numeroParcelasSugerido}
          \-[NUM_INT] LiteralNode: '2'

	at org.hibernate.hql.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:140)
	at org.hibernate.hql.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:637)
	at org.hibernate.hql.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:466)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:645)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
	at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:218)
	at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:158)
	at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
	at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
	at org.hibernate.impl.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:363)
	at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:327)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1176)
	at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:814)
	at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:732)
	at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1369)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
	... 49 more
Criado 5 de agosto de 2010
Respostas 0
Participantes 1