Restrição Criteria
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!
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
Curtidas 0
Respostas
Wanderson Cortes
10/11/2014
Acho que no seu caso o Restrictions.between resolve
.add(Restrictions.between("data", dataInicial, dataFinal);GOSTEI 0
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).
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
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).
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
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();
}
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
10/11/2014
Mas o que não da certo ? Qual erro retorna ? O que acontece?
GOSTEI 0
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
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
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:
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.
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
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!!
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
10/11/2014
Isso mesmo, o 'getTime()' era a solução. QUe bom que funcionou.
Disponha.
Disponha.
GOSTEI 0
Ronaldo Lanhellas
10/11/2014
Isso mesmo, o 'getTime()' era a solução. QUe bom que funcionou.
Disponha.
Disponha.
GOSTEI 0
Ronaldo Lanhellas
10/11/2014
Isso mesmo, o 'getTime()' era a solução. QUe bom que funcionou.
Disponha.
Disponha.
GOSTEI 0
Ronaldo Lanhellas
10/11/2014
Isso mesmo, o 'getTime()' era a solução. QUe bom que funcionou.
Disponha.
Disponha.
GOSTEI 0
Ronaldo Lanhellas
10/11/2014
Isso mesmo, o 'getTime()' era a solução. QUe bom que funcionou.
Disponha.
Disponha.
GOSTEI 0