首页 > 解决方案 > 数据库 Oracle,查询日期字符串 JPA 存储库 Crud 存储库,Java 8

问题描述

注意:我不能放置一些私有代码(数据库或 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";

作品!

    List<Object[]> listaObjects = theRepository.getEntityUsingString(stringIni, stringEnd);

失败!它没有给我带来结果(但它也没有显示任何错误)。

    List<Object[]> listaObjects = theRepository.getEntityUsingDate(dateIni, dateEnd);

问题:

我想了解为什么使用相同fecha (java.util.Date)的方法getEntityUsingString有效,但使用该方法getEntityUsingDate失败(当我使用 Date 设置范围时它不会给我带来结果,而当我使用 String 设置范围时它会。)。

在我看来,它应该产生符合日期范围的相同结果。

问题是什么?

标签: oraclejpacrudspring-repositories

解决方案



推荐阅读