ПРИМЕЧАНИЕ: Я не могу поместить приватный код (база данных или код Java).
У меня в базе данных
CREATE TABLE "SCHEMA"."ENTITY"
(
"HCODFECREGISTR" DATE,
... BLABLA
)
Сущность
import java.util.Date;
public class Entity implements java.io.Serializable {
private Date hcodfecregistr;
....
}
В интерфейсе Repository
используя
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
public interface EntityRepository extends CrudRepository<Entity, Long>,
JpaRepository<Entity, Long> {
public static final String USING_STRING
= " SELECT enti FROM Entity enti WHERE "
+ " (enti.hcodfecregistr BETWEEN TO_DATE(:stringIni,'dd/MM/yyyy hh24:mi') AND TO_DATE(:stringEnd,'dd/MM/yyyy hh24:mi'))";
@Query(value = USING_STRING)
List<Object[]> getEntityUsingString(
@Param("stringIni") String stringIni, @Param("stringEnd") String stringEnd);
public static final String USING_DATE
= " SELECT enti FROM Entity enti WHERE "
+ " (enti.hcodfecregistr BETWEEN :dateIni AND :dateIni) ";
@Query(value = USING_DATE)
List<Object[]> getEntityUsingDate(
@Param("dateIni") Date dateIni, @Param("dateEnd") Date dateEnd);
}
Теперь я хочу выполнить запрос.
Date fecha = //some java.util.Date
Calendar calendar = Calendar.getInstance();
calendar.setTime(fecha);
calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date dateIni = calendar.getTime();
calendar.set(Calendar.HOUR, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
Date dateEnd = calendar.getTime();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
String stringIni = dateFormat.format(fecha) + " 00:00";
String stringEnd = dateFormat.format(fecha) + " 23:59";
Works!
List<Object[]> listaObjects = theRepository.getEntityUsingString(stringIni, stringEnd);
Fails! Это не дает мне результатов (но также не показывает никакой ошибки ).
List<Object[]> listaObjects = theRepository.getEntityUsingDate(dateIni, dateEnd);
Вопрос:
Я хочу понять, почему при использовании того же fecha (java.util.Date)
метод getEntityUsingString
работает, но при использовании метода getEntityUsingDate
не получается (
Когда я устанавливаю диапазон с помощью Date, он не дает мне результатов, тогда как когда я устанавливаю диапазон с помощью String, он дает.).
На мой взгляд, он должен давать тот же результат, который соответствует диапазону дат.
В чем проблема?