Estou precisando fazer uma consulta no meu BD que me retorne os aniversariantes de determinado mes.
Ja tenho o mes para passar como parametro, o problema é como filtrar um campo DATE do MySql apenas com o mes que quero e utilizando Criteria. Isso é possível?
Eu sei que tem uma função do proprio MySQL que me possibilita fazer as comparações apenas com o mes, mesmo sendo um campo DATE, mas alem de não estar achando nem lembrando que função é essa, tambem nao sei como fazer algo parecido com Criteria.
Espero ter sido claro.
Se alguem puder me ajudar, agradeço.
Nao sei como vou pegar o dia de cada mes, só tenho o numero do mes (por exemplo 1= janeiro). Achei que tinha alguma outra função, porque eu sei que no MySql tem como pegar a data toda e extrair apenas o mes dela e comparar com o que voce tem, mais ou menos isso.
Como assim pegar o dia de cada mês? Se for pra pegar o range de dias de um determinado mês vc usa a classe Calendar como eu já havia dito anteriormente.
Nesse exemplo que me deu, voce usa a variavel primeiroDiaDoMes e ultimoDiaDoMes, eu só tenho o mes em numero, por isso falei que não sei como pegar o dia do mes. Na verdade ainda nao consegui aplicar esse teu exemplo
Nesse exemplo que me deu, voce usa a variavel primeiroDiaDoMes e ultimoDiaDoMes, eu só tenho o mes em numero, por isso falei que não sei como pegar o dia do mes. Na verdade ainda nao consegui aplicar esse teu exemplo[/quote]
Vamos lá , pense um pouco. Qual é o primeiro dia do mês ? qualquer mês ? dia 1.
O primeiro dia do mes x é 1 de x
O ultimo dia depende do ano, mas no caso vc pode usar o dia 1 do mes seguinte. A ideia de quem escreveu aquele codigo é vc fazer uma pesquisa que retorna todo o mundo cuja aniversário cai entre o dia 1 do mes corrente inclusive e o ultimo dia do mes corrrente inclusive que é o mesmo que entre o dia 1 do mes corrente inclusive, e o dia 1 do mes seguinte exclusive.
Agora que vc entendeu, vc entende também que esta tecnica não funciona, porque vc não tem o ano para compor o resto da data.
A unica forma é utilizar uma função que lhe retorne o mes da data independentemente do dia ou do ano. Só que para usar isso vc não consegue usar criteria (nem hql eu acho).
Vc teria que carregar todo o mundo e aplicar um filtro java. ou usar SQL nativo para usar as funções do banco explicitamente.
Bom, eu recomendaria usar o Restrictions.between(“dt_Aniversario”,$PrimeiroDiaMes,$UltimoDiaMes)); do criteria e sobre as duas variaveis vc pode fazer da seguinte forma.
private int $Ano = Calendar.getInstance().get(Calendar.YEAR);//Devolve o Ano na forma de um inteiro
private int $Mes = Calendar.getInstance().get(Calendar.MONTH)+1;////Devolve o Mes atual na forma de um inteiro
private Date $PrimeiroDiaMes = new Date($Ano+"/"+$Mes+"/"+Calendar.getInstance().getActualMinimum(Calendar.DAY_OF_MONTH));
private Date $UltimoDiaMes = new Date($Ano+"/"+$Mes+"/"+Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH));
Bom eu usei uma variavel inteira para o mes e ano, apenas para nao ficar repetindo todo aquele codigo novamente.
Sobre pegar o ultimo dia de cada vez, e o primeiro existe um método dentro de calendar que devolve para voce o primeiro e ultimo conforme vc pode ver no código acima, espero ter ajudado
[quote=viniciuspadua]tb estou querendo saber mais utilizando o criteria ao invés do query.
alguém fez?[/quote]
Bom dia!
Eu costumo utilizar o Restrictions.between(), e utilizo uma instancia da Classe Calendar sendo que dataMinima é a instancia capturada no inicio da aplicação no meu caso essa data minima é inicida da seguinte forma.
[code]
private Calendar dataMinima = Calendar.getInstance(); //Captura da Instancia da Classe Calendar
dataMinima.add(Calendar.MONTH, -3);//Voltei o Calendario da Instancia 3 meses para traz a partir da data atual.
Bom se o caso é esse vc poder usar o Restrictions.sqlRestriction() é um metodo sobrecarregado nele voce so terá que especificar o sql a ser acrescentado a pesquisa que no caso deve ser o Month(dataAniversarios) = mes