(Duvida) pesquisar entre datas com HQL

Java

12/08/2011

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
Wisley Souza

Wisley Souza

Curtidas 0

Respostas

Davi Costa

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
GOSTEI 0
Wisley Souza

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

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
GOSTEI 0
Wisley Souza

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
POSTAR