¿Cómo comparar fechas con en una Criteria Query sin que se considere la hora?
Una opción >> es usando la función between del Criteria Builder
A lo que hay que agregar, por supuesto, el código que setea la hora, los minutos y los segundos en 00:00:00 para le fechaInicio y en 23:59:59 para la fechaFin… lo cual ni siquiera es exacto ya que podría darse el caso que tengamos un registro a las 23:59:59:01 (el tiempo es continuo!)
builder.between(rootObjeto.get(Objeto_.fecha), fechaInicio, fechaFin);
Como sugieren aquí >>, hay una API function en JPA 2 que nos permite invocar las funciones de SQL:
builder.and( builder.equal(builder.function("YEAR", Date.class, rootObjeto.get(Objeto_.fecha)), calendario.get(Calendar.YEAR)), builder.equal(builder.function("MONTH", Date.class, rootObjeto.get(Objeto_.fecha)), calendario.get(Calendar.MONTH)+1), //los meses parten en 0 builder.equal(builder.function("DAY", Date.class, rootObjeto.get(Objeto_.fecha)), calendario.get(Calendar.DAY_OF_MONTH)) );
el contra de ésto es que no es db-‘agnóstico‘, o sea que la función a invocar va a depender de sobre qué motor de base de datos estemos desarrollando.