Restrição Criteria

Java

10/11/2014

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

Curtidas 0

Respostas

Wanderson Cortes

Wanderson Cortes

10/11/2014

Acho que no seu caso o Restrictions.between resolve

.add(Restrictions.between("data", dataInicial, dataFinal);
GOSTEI 0
Wagner Barbosa

Wagner Barbosa

10/11/2014

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).
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

10/11/2014

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));`
GOSTEI 0
Wagner Barbosa

Wagner Barbosa

10/11/2014

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();

}
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

10/11/2014

Mas o que não da certo ? Qual erro retorna ? O que acontece?
GOSTEI 0
Wagner Barbosa

Wagner Barbosa

10/11/2014

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
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

10/11/2014

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.
GOSTEI 0
Wagner Barbosa

Wagner Barbosa

10/11/2014

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!!
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

10/11/2014

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

Disponha.
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

10/11/2014

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

Disponha.
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

10/11/2014

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

Disponha.
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

10/11/2014

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

Disponha.
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

10/11/2014

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

Disponha.
GOSTEI 0
POSTAR