Duvida JPA/HIbernate com criteria com Date ...compara data com hora igual data sem hora

Olá,

estou montando com query onde na te la jsp pego a da como String (01/01/2009)

e ao montar a query com criteria no banco de dados esse campo está com DateTime ( banco Mysql)

e foi gravado com hora (ex. 01/01/2009 13:14) .

Quando faço a query dinamica onde dataencerramento = dataJSP

Não tras nada como poderia tratar a data do banco com hora (queria na query dinamica trazer sem a hora/minuto/segundo)

com a data da pagina JSP ???

ALguém pode me ajudar …

abs


if(detail.getOperator().equals("="))
	    disjOR.add(Restrictions.eq(detail.getColumn(),CriteriaSearchDetail.checkTypeOfClass(classTableName, detail.getColumn(), detail.getValue())));
	
---
public static Date convertStringToDate(String date) throws BaseException {
		Date out = new Date();
		Calendar cal = Calendar.getInstance();
		
		int monthDate =0;
		try{
			
	        int ano = Integer.parseInt(date.substring(6,10));
	        int mes = Integer.parseInt(date.substring(3,5));
	        int dia = Integer.parseInt(date.substring(0,2));
			
	        if(mes ==1)
	        	monthDate = Calendar.JANUARY;
	        if(mes ==2)
	        	monthDate = Calendar.FEBRUARY;
	        if(mes ==3)
	        	monthDate = Calendar.MARCH;
	        if(mes ==4)
	        	monthDate = Calendar.APRIL;
	        if(mes ==5)
	        	monthDate = Calendar.MAY;
	        if(mes ==6)
	        	monthDate = Calendar.JUNE;
	        if(mes ==7)
	        	monthDate = Calendar.JULY;
	        if(mes ==8)
	        	monthDate = Calendar.AUGUST;
	        if(mes ==9)
	        	monthDate = Calendar.SEPTEMBER;
	        if(mes ==10)
	        	monthDate = Calendar.OCTOBER;
	        if(mes ==11)
	        	monthDate = Calendar.NOVEMBER;
	        if(mes ==12)
	        	monthDate = Calendar.DECEMBER;

	        cal.set(Calendar.YEAR,ano);
	        cal.set(Calendar.MONTH, monthDate);
	        cal.set(Calendar.DAY_OF_MONTH, dia);
	        cal.set(Calendar.HOUR, 0);
	        cal.set(Calendar.MINUTE, 0);
	        cal.set(Calendar.SECOND, 0);
	    
	        out= cal.getTime();	
	        
		} catch(Exception e) {
			//throw new BaseException(e, "CriteriaSearchDetail", "convertStringToCalendar", "1");
		}
		return out;

Cara, usa um Like.
Por exemplo:

 Criteria criteria = session.createCriteria(tabela.class);

 String data = "10/12/2009"
 criteria.add(Restrictions.Like("data",data+"%");

vc pode fazer assim

public static Criterion eqDate(String stringDate) { Date date = DateUtils.toDate(stringDate); return Restriction.beetwen("data",DateUtils.lowDateTime(date),DateUtils.highDateTime(date)); }

a classe DateUtils, segue abaixo…

[code]import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
*

  • @author Tomaz Lavieri
    /
    public class DateUtils {
    /
    *

    • Formatação “dd/mm/yyyy”.
      /
      public static DateFormat BRAZIL_FORMAT = new SimpleDateFormat(“dd/mm/yyyy”);
      /
      *
    • Formatação “dd/mm/yy”.
      */
      public static DateFormat BRAZIL_SHORT_FORMAT =
      new SimpleDateFormat(“dd/mm/yy”);

    /**

    • Não é possivel instanciar DateUtils.
      */
      private DateUtils(){}

    /**

    • Retorna o valor do horário minimo para a data de referencia passada.


    • Por exemplo se a data for “30/01/2009 as 17h:33m:12s e 299ms” a data
    • retornada por este metodo será “30/01/2009 as 00h:00m:00s e 000ms”.
    • @param date de referencia.
    • @return {@link Date} que representa o horário minimo para dia informado.
      */
      public static Date lowDateTime(Date date) {
      Calendar aux = Calendar.getInstance();
      aux.setTime(date);
      toOnlyDate(aux); //zera os parametros de hour,min,sec,milisec
      return aux.getTime();
      }

    /**

    • Retorna o valor do horário maximo para a data de referencia passada.


    • Por exemplo se a data for "30/01/2009 as 17h:33m:12s e 299ms" a data
    • retornada por este metodo será "30/01/2009 as 23h:59m:59s e 999ms".
    • @param date de referencia.
    • @return {@link Date} que representa o horário maximo para dia informado.
      */
      public static Date highDateTime(Date date) {
      Calendar aux = Calendar.getInstance();
      aux.setTime(date);
      toOnlyDate(aux); //zera os parametros de hour,min,sec,milisec
      aux.roll(Calendar.DATE, true); //vai para o dia seguinte
      aux.roll(Calendar.MILLISECOND, false); //reduz 1 milisegundo
      return aux.getTime();
      }

    /**

    • Zera todas as referencias de hora, minuto, segundo e milesegundo do
    • {@link Calendar}.
    • @param date a ser modificado.
      */
      public static void toOnlyDate(Calendar date) {
      date.set(Calendar.HOUR_OF_DAY, 0);
      date.set(Calendar.MINUTE, 0);
      date.set(Calendar.SECOND, 0);
      date.set(Calendar.MILLISECOND, 0);
      }

    /**

    • Converte uma {@link String} no formato "dd/mm/yyyy" ou "dd/mm/yy" em um
    • {@link Date}.
    • @param date a {@link String} contendo a data.
    • @return o objeto {@link Date} para a string passada.
    • @throws IllegalArgumentException caso a string não seja em dos dois
    •      formatos permitidos.
      

    */
    public static Date toDate(String date) throws IllegalArgumentException {
    if (date == null)
    return null;
    try {
    return date.length() > 8 ?
    BRAZIL_FORMAT.parse(date) : BRAZIL_SHORT_FORMAT.parse(date);
    } catch (ParseException ex) {
    throw ExceptionUtils
    .toRuntimeException(IllegalArgumentException.class, ex);
    }
    }

    /**

    • Formata a data passada em uma {@link String} com o formato "dd/mm/yyyy".
    • @param date a data a ser formatada.
    • @return {@link String} com a data formatada.
      /
      public static String toString(Date date) {
      if (date == null)
      return null;
      return BRAZIL_FORMAT.format(date);
      }
      /
      *
    • Formata a data passada em uma {@link String} com <tt>shortFormat</tt>
    • “dd/mm/yy”, ou com o formato longo “dd/mm/yyyy”.
    • @param date a data a ser formatada.
    • @param shortFormat <tt>true</tt> se o formato é o curto, ou
    •      &lt;tt&gt;false&lt;/tt&gt; caso o formato seja o longo.
      
    • @return {@link String} com a data formatada.
      */
      public static String toString(Date date, boolean shortFormat) {
      if (date == null)
      return null;
      return shortFormat ?
      BRAZIL_SHORT_FORMAT.format(date) : BRAZIL_FORMAT.format(date);
      }
      }[/code]

Obrigado Lavieri, o código funcionou suave como uma pena!

Precisando estamos ai!

Abs.