Java 带JpaRepository的SQL查询:如何仅基于年、月和日过滤LocalDateTime?

Java 带JpaRepository的SQL查询:如何仅基于年、月和日过滤LocalDateTime?,java,sql,sql-server,jpa,spring-data-jpa,Java,Sql,Sql Server,Jpa,Spring Data Jpa,我有一个EntityShow,它有一个名为start的LocalDateTime变量: 公开课{ //-其他代码-- @Columnnullable=false 私有LocalDateTime启动; //-其他代码-- } 我只想根据年、月和日从数据库中选择,而忽略小时和分钟 我目前的查询是: @Queryvalue=从show s中选择*,其中s.event\u id=:eventId 和DATEPARTyear,s.start=DATEPARTyear,:dateSearch 和DATEPA

我有一个EntityShow,它有一个名为start的LocalDateTime变量:

公开课{ //-其他代码-- @Columnnullable=false 私有LocalDateTime启动; //-其他代码-- } 我只想根据年、月和日从数据库中选择,而忽略小时和分钟

我目前的查询是:

@Queryvalue=从show s中选择*,其中s.event\u id=:eventId 和DATEPARTyear,s.start=DATEPARTyear,:dateSearch 和DATEPARTmonth,s.start=DATEPARTmonth,:dateSearch 和DATEPARTday,s.start=DATEPARTday,:dateSearch,nativeQuery=true 页findAllFiltered@ParameventIdLong eventId,@ParamdateSearch LocalDateTime dateSearch,可分页页面; 当我尝试执行该查询时,我得到一个500错误代码,并显示以下消息:

无法编制报表;嵌套异常为org.hibernate.exception.genericjdbception:无法准备语句


编辑:使代码块中的查询更易于阅读

我建议您更改为使用日期/时间范围,而不是单个值。如果表恰好有一个关于event_id start的索引,那么这在查询中的性能也会更好

大概是这样的:

@Query(value = "SELECT *" +
                " FROM show s" +
               " WHERE s.event_id = :eventId" +
                 " AND s.start >= :startDate" +
                 " AND s.start < :endDate", nativeQuery = true)
Page<Show> findAllFiltered(@Param("eventId") Long eventId,
                           @Param("startDate") LocalDateTime startDate,
                           @Param("endDate") LocalDateTime endDate,
                           Pageable page);

异常的原始原因是什么,即真正的错误?
Page<Show> findAllFiltered(@Param("eventId") Long eventId,
                           @Param("dateSearch") LocalDateTime dateSearch,
                           Pageable page) {
    LocalDateTime startDate = dateSearch.truncatedTo(ChronoUnit.DAYS);
    LocalDateTime endDate = startDate.plusDays(1);
    return findAllFiltered(eventId, startDate, endDate, page);
}