Alguem já usou, HQL case?

4 respostas
T

tenho o seguinte HQL:

select new Map(registroPonto.pessoa.departamento as departamento, sum(case when registroPonto.status = 'C' then 1 else 0 end) as completo, sum(case when registroPonto.status = 'A' then 1 else 0 end) as incompleto, sum(case when registroPonto.status = 'T' then 1 else 0 end) as inconsistente, sum(case when registroPonto.status = 'I' then 1 else 0 end) as incorreto, sum(case when registroPonto.status = 'P' then 1 else 0 end) as periodoAusencia) from br.com.sintesis.dex.dmn.DexRegistroPontoDmn registroPonto where registroPonto.data between :dataInicial and :dataFinal and registroPonto.pessoa.cartao is not null and registroPonto.pessoa.status = 'A' and registroPonto.pessoa.departamento.id = :departamentoId group by registroPonto.pessoa.departamento

Ao tentar executar query.list();

erro que retorna:

java.lang.NullPointerException

at org.hibernate.hql.NameGenerator.generateColumnNames(NameGenerator.java:23)

at org.hibernate.hql.ast.SessionFactoryHelper.generateColumnNames(SessionFactoryHelper.java:208)

at org.hibernate.hql.ast.SelectClause.initializeColumnNames(SelectClause.java:218)

at org.hibernate.hql.ast.SelectClause.finishInitialization(SelectClause.java:208)

at org.hibernate.hql.ast.SelectClause.initializeExplicitSelectClause(SelectClause.java:202)

at org.hibernate.hql.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:440)

at org.hibernate.hql.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:351)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.afterQuery(HqlSqlBaseWalker.java:126)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:471)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:201)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:151)

at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:189)

at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:130)

at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:83)

at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:422)

at org.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:822)

at org.hibernate.impl.SessionImpl.list(SessionImpl.java:782)

at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)

at br.com.sintesis.bus.registroPonto.RegistroPontoDao.getRegistroPontoNovo(RegistroPontoDao.java:242)

at br.com.sintesis.bus.registroPonto.RegistroPontoSrv.consultaRegistroStatus(RegistroPontoSrv.java:112)


O hibernate tem problemas com case no HQL ?

4 Respostas

L

vc não está usando alguma variável nula que o hibernate não está conseguindo executar??? Dá uma verificada nos valores atuais quando está executando esse trecho de código

T

Problema que meu trecho de código não dá erro. Dá erro somente ao executar a linha:

List lista = query.list();

try{
   Session session = HbnUtil.getCurrentSession();
   StringBuffer hqlList = new StringBuffer();
   hqlList.append("select new Map(registroPonto.pessoa.departamento as departamento,").append(
   "sum(case when registroPonto.status  = 'C' then 1 else 0 end) as completo,").append(
   "sum(case when registroPonto.status  = 'A' then 1 else 0 end) as incompleto,").append(
   "sum(case when registroPonto.status  = 'T' then 1 else 0 end) as inconsistente,").append(
   "sum(case when registroPonto.status  = 'I' then 1 else 0 end) as incorreto,").append(
   " sum(case when registroPonto.status  = 'P' then 1 else 0 end) as periodoAusencia)").append(     
   " from br.com.sintesis.dex.dmn.DexRegistroPontoDmn registroPonto").append(
   " where registroPonto.data between :dataInicial and :dataFinal").append(
   " and registroPonto.pessoa.cartao is not null").append(
   " and registroPonto.pessoa.status = 'A'").append(
   " group by registroPonto.pessoa.departamento");
   Query query = session.createQuery(hqlList.toString());
   query.setDate("dataInicial", dataInicial);
   query.setDate("dataFinal", dataFinal);
   List lista = query.list(); //-----Aqui dá o erro.
} catch (Throwable e) {
   throw Util.getBaseException(e);
}
L

Mesmo assim…se vc estiver passando algum argumento nulo, tipo alguma data, só vai dar erro quando vc executar a query.list() e não na hora de setar os dados para a query

T

O problema era a versao do hibernate que nao aceitava … so aceita case apartir da 3.2.

Criado 13 de junho de 2008
Ultima resposta 9 de mar. de 2009
Respostas 4
Participantes 2