(Duvida) pesquisar entre datas com HQL
Olá pessoal, mas um duvida hehe...
tenho entidade Feriados, esses feriados são fixo e moveis, os moveis sao qlquer data, mas os fixos tem ano 1970,
e so mostram na Visao o dia e mes, mas na hora de pesquisar entre datas estou com problemas, pois como o ano e 1970 ele nao me traz, na pesquisa, como eu posso fazer essa pesquisa?
sem ter problemas com o ano
tenho entidade Feriados, esses feriados são fixo e moveis, os moveis sao qlquer data, mas os fixos tem ano 1970,
e so mostram na Visao o dia e mes, mas na hora de pesquisar entre datas estou com problemas, pois como o ano e 1970 ele nao me traz, na pesquisa, como eu posso fazer essa pesquisa?
sem ter problemas com o ano
Wisley Souza
Curtidas 0
Respostas
Davi Costa
12/08/2011
Pq existe esse fixo de 1970?
Mesmo assim quando pesquisar use um ou (or) passando a data com o ano de 1970 tb, traria tudo,p ano que vc passou e p ano de 1970
att Davi
Mesmo assim quando pesquisar use um ou (or) passando a data com o ano de 1970 tb, traria tudo,p ano que vc passou e p ano de 1970
att Davi
GOSTEI 0
Wisley Souza
12/08/2011
pq os fixos sao sempre na mesma data, exemplo natal...dai o ano padra pra feriados fixos e 1970...
dai se eu pesquisar entre 02/02/2011 a 12/12/2011
ele me traz todos os feriados moveis nessa facha
e me traz os os fixos tbm, so que no caso do fixo ele desconsidera o ano e soleva em conat dia e mes...
o resultada pesquisa sicaria assim
TIPO data
fixo 03/02 fixo 05/07 movel 01/05/2011
entendeu?
GOSTEI 0
Davi Costa
12/08/2011
O hibernate te dá a possibilidade através do Criteria de usar SQL Ansi, na sua cláusula where,
acho que é por ai que vc pode resolver comparando só parte das datas através de sql ansi, isso é tranquilo de fazer com postgresql, oracle, sqlserver.... e por ai vai
att Davi
acho que é por ai que vc pode resolver comparando só parte das datas através de sql ansi, isso é tranquilo de fazer com postgresql, oracle, sqlserver.... e por ai vai
att Davi
GOSTEI 0
Wisley Souza
12/08/2011
fiz uma gambiarra e funcionou...pra quiser a resposta(Creio pouco que ela vá servir) pra pelo menos lidar com pesquisa entre datas ai está o que eu fiz:
if (filtro.getDataInicio() != null) {
Calendar c = Calendar.getInstance(); c.setTime(filtro.getDataInicio()); c.set(Calendar.YEAR, 1970);
Date date = c.getTime();
hql .appendCondicao("( ((f.data >= :dataInicio) and (year(f.data) is not 1970))" + " or " + "((f.data >= :dataInicioI ) and (year(f.data) is 1970) ) )");
hql.setParameter("dataInicio", filtro.getDataInicio()); hql.setParameter("dataInicioI", date); } } if (filtro.getDataFim() != null) {
Calendar c = Calendar.getInstance();
c.setTime(filtro.getDataFim()); if (filtro.getDataInicio() != null) { Calendar dtIni = Calendar.getInstance(); dtIni.setTime(filtro.getDataInicio()); if (c.get(Calendar.YEAR) == dtIni.get(Calendar.YEAR)) { c.set(Calendar.YEAR, 1970); } else if (c.get(Calendar.YEAR) > dtIni.get(Calendar.YEAR)) { c.set(Calendar.YEAR, 1971); } } else {
c.set(Calendar.YEAR, 1971); } Date date = c.getTime();
hql .appendCondicao(" ( ((f.data <= :dataFim ) and (year(f.data) is not 1970) )" + " or " + "((f.data <= :dataFimF)and (year(f.data) is 1970)))");
hql.setParameter("dataFim", filtro.getDataFim()); hql.setParameter("dataFimF", date); }
GOSTEI 0