¿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.

Este sitio utiliza cookies.    Leer más