Fórum Restrição Criteria #500701

10/11/2014

0

Bom dia!! Sou novato na área de programação. Então gostaria de uma ajuda... Estou tentando colocar uma condição em um relatório de avaliação. Nesse relatório, eu tenho uma data de finalização de chamado (data_finalizacao), estou tentando colocar uma condição, para aparecer nesse relatório, apenas chamados que seja igual à data (data_finalizacao) ou mais que 30 dias... Exemplo, eu finalizei um chamado hoje. Então no relatório, o chamado só vai ficar disponível de hoje (10/11/2014) até (10/12/2014), para ser feita a avaliação. Se puderem me ajudar... Obrigado!!!
Segue abaixo as restrições que estão sendo usada para gerar o relatório

@SuppressWarnings("unchecked")
public Collection<SuporteSolicitacao> pegarSolicitacoesSemNotasPorUsuario(int usuarioId) throws Exception{

Criteria criteria = session.createCriteria(SuporteSolicitacao.class)
.add(Restrictions.eq("solicitante.id", usuarioId))
.add(Restrictions.eq("nota", ENOTA.NAO_VOTADO))
.add(Restrictions.eq("finalizada", SIM_NAO.SIM));

return criteria.list();

}

Obrigado!
Wagner Barbosa

Wagner Barbosa

Responder

Posts

10/11/2014

Wanderson Cortes

Acho que no seu caso o Restrictions.between resolve

.add(Restrictions.between("data", dataInicial, dataFinal);
Responder

Gostei + 0

10/11/2014

Wagner Barbosa

Tentei só que ainda não deu certo...
Também expliquei um pouco diferente...
O que preciso, seria isso:
Eu tenho uma data de finalização de chamado (data_finalizacao), preciso que mostre neste relatório, apenas os chamados que sejam iguais à data (data_finalizacao) ou abaixo de 30 dias... Exemplo, eu finalizei um chamado hoje. Então no relatório, só irá mostrar os chamados de hoje (10/11/2014) até (10/10/2014).
Responder

Gostei + 0

10/11/2014

Ronaldo Lanhellas

Tentei só que ainda não deu certo...
Também expliquei um pouco diferente...
O que preciso, seria isso:
Eu tenho uma data de finalização de chamado (data_finalizacao), preciso que mostre neste relatório, apenas os chamados que sejam iguais à data (data_finalizacao) ou abaixo de 30 dias... Exemplo, eu finalizei um chamado hoje. Então no relatório, só irá mostrar os chamados de hoje (10/11/2014) até (10/10/2014).


Pode tentar com o ge(Maior que) e lt (Meno que)

criteria.add(Restrictions.ge("data_finalizacao", inicioData)); 
criteria.add(Restrictions.lt("data_finalizacao", fimData));`
Responder

Gostei + 0

11/11/2014

Wagner Barbosa

Boa tarde!
Tentei dessa forma, só q não deu certo ainda...
@SuppressWarnings("unchecked")
public Collection<SuporteSolicitacao> pegarSolicitacoesSemNotasPorUsuario(int usuarioId) throws Exception{

Calendar dataMenos1Mes = new GregorianCalendar();
dataMenos1Mes.add(dataMenos1Mes.MONTH, -1);

Criteria criteria = session.createCriteria(SuporteSolicitacao.class)
.add(Restrictions.eq("solicitante.id", usuarioId))
.add(Restrictions.eq("nota", ENOTA.NAO_VOTADO))
.add(Restrictions.ge("data_Finalizacao", dataMenos1Mes ))
.add(Restrictions.eq("finalizada", SIM_NAO.SIM));

return criteria.list();

}
Responder

Gostei + 0

11/11/2014

Ronaldo Lanhellas

Mas o que não da certo ? Qual erro retorna ? O que acontece?
Responder

Gostei + 0

11/11/2014

Wagner Barbosa

Não deu certo...
Como eu disse, sou iniciante... pode ser alguma coisa simples...

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Exception while invoking action SolicitacaoAction: null / java.lang.reflect.InvocationTargetException / java.util.GregorianCalendar cannot be cast to java.util.Date / java.lang.ClassCastException
org.mentawai.core.Controller.service(Controller.java:661)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause

java.lang.ClassCastException: java.util.GregorianCalendar cannot be cast to java.util.Date
org.hibernate.type.TimestampType.toString(TimestampType.java:55)
org.hibernate.type.NullableType.nullSafeToString(NullableType.java:93)
org.hibernate.type.NullableType.nullSafeSet(NullableType.java:140)
org.hibernate.type.NullableType.nullSafeSet(NullableType.java:116)
org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1707)
org.hibernate.loader.Loader.bindParameterValues(Loader.java:1678)
org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1563)
org.hibernate.loader.Loader.doQuery(Loader.java:673)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
org.hibernate.loader.Loader.doList(Loader.java:2220)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
org.hibernate.loader.Loader.list(Loader.java:2099)
org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
fiemt.ctinf.suporte.solicitacao.dao.SolicitacaoDao.pegarSolicitacoesSemNotasPorUsuario(SolicitacaoDao.java:361)
fiemt.ctinf.suporte.solicitacao.service.SolicitacaoService.pegarSolicitacoesSemNotasPorUsuario(SolicitacaoService.java:160)
fiemt.ctinf.suporte.solicitacao.action.SolicitacaoAction.procurarPendetesAvaliacao(SolicitacaoAction.java:377)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:601)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:299)
org.mentawai.filter.InjectionFilter.filter(InjectionFilter.java:154)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139)
org.mentawai.filter.AuthorizationFilter.filter(AuthorizationFilter.java:334)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139)
org.mentawai.filter.AuthenticationFilter.filter(AuthenticationFilter.java:125)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139)
fiemt.ctinf.util.DataExtensoFilter.filter(DataExtensoFilter.java:21)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139)
org.mentawai.filter.HibernateFilter.filter(HibernateFilter.java:187)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139)
org.mentawai.filter.AutoWiringFilter.filter(AutoWiringFilter.java:110)
org.mentawai.filter.DIFilter.filter(DIFilter.java:68)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139)
org.mentawai.filter.IoCFilter.filter(IoCFilter.java:83)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139)
org.mentawai.core.Controller.invokeAction(Controller.java:759)
org.mentawai.core.Controller.service(Controller.java:624)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.35 logs.

Apache Tomcat/6.0.35
Responder

Gostei + 0

11/11/2014

Ronaldo Lanhellas

O erro não tem nada haver com não funcionar o critéria, na verdade você está usando um Gregorian e o SQL espera um Date.

Veja o erro:

java.util.GregorianCalendar cannot be cast to java.util.Date / java.lang.ClassCastException


A solução é você capturar a data do GregorianCalendar e passar para o criteria, no caso pode usar o between mesmo como estava fazendo logo acima.
Responder

Gostei + 0

12/11/2014

Wagner Barbosa

Obrigado pelas dicas Ronaldo Lanhellas!!!
Ta funcionando agora!!
Ficou assim então:
@SuppressWarnings("unchecked")
public Collection<SuporteSolicitacao> pegarSolicitacoesSemNotasPorUsuario(int usuarioId) throws Exception{

Calendar dataMenos1Mes = new GregorianCalendar();
dataMenos1Mes.add(dataMenos1Mes.MONTH, -1);

Criteria criteria = session.createCriteria(SuporteSolicitacao.class)
.add(Restrictions.eq("solicitante.id", usuarioId))
.add(Restrictions.eq("nota", ENOTA.NAO_VOTADO))
.add(Restrictions.ge("dataFinalizacao", dataMenos1Mes.getTime() ))
.add(Restrictions.eq("finalizada", SIM_NAO.SIM));

return criteria.list();

}
Obrigado!!
Responder

Gostei + 0

12/11/2014

Ronaldo Lanhellas

Isso mesmo, o 'getTime()' era a solução. QUe bom que funcionou.

Disponha.
Responder

Gostei + 0

12/11/2014

Ronaldo Lanhellas

Isso mesmo, o 'getTime()' era a solução. QUe bom que funcionou.

Disponha.
Responder

Gostei + 0

12/11/2014

Ronaldo Lanhellas

Isso mesmo, o 'getTime()' era a solução. QUe bom que funcionou.

Disponha.
Responder

Gostei + 0

12/11/2014

Ronaldo Lanhellas

Isso mesmo, o 'getTime()' era a solução. QUe bom que funcionou.

Disponha.
Responder

Gostei + 0

12/11/2014

Ronaldo Lanhellas

Isso mesmo, o 'getTime()' era a solução. QUe bom que funcionou.

Disponha.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar