添加“为空”条件时LocalDateTime停止工作

时间:2018-08-11 01:10:43

标签: java spring rest h2 jpql

我遇到以下问题:

我有一个REST端点,带有一个控制器和一个存储库。我正在尝试运行GET方法。以下代码效果很好:

这里是控制器:

proxyTargetClass

这是存储库:

@Before

这完全可以正常工作。但是,当我将“ is null”条件添加到:cutoffDateTime参数(如下所示)时,它将停止工作:

    @RequestMapping(method = RequestMethod.GET, value = "/search/findmycalendar")
public ResponseEntity<Page<CalendarView>> getCalendar(
        @RequestParam(required = false, name = "period")
        @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate period,
        @RequestParam(required = false, name = "cutoff")
        @DateTimeFormat(iso = ISO.DATE_TIME) LocalDateTime cutoff,
        @RequestParam("code") String code, Pageable pageable) {
    Page<CalendarView> cv2 =
            calendarR.getCalendarByCalendarPeriodCutoffDate(period, cutoff, code, pageable);
    if (cv2.getTotalElements() == 0) {
        return ResponseEntity.notFound().build();
    } else {
        return ResponseEntity.ok().body(cv2);
    }

}

这是CalendarView的定义:

@Query(value = "SELECT DISTINCT new CalendarView("
        + "calendar.id, "
        + "calendar.Rid, "
        + "calendar.code, "
        + "calendar.version ) "
        + "FROM ScaCalendar calendar "
        + " WHERE (calendar.calendarPeriod >= :calendarPeriod)  "
        + " AND (calendar.cutOffDateTime >= :cutoffDateTime)  "
        + " AND calendar.tenantCode = :tenantCode ")
Page<CalendarView> getCalendarByCalendarPeriodCutoffDate(
        @Param("calendarPeriod") LocalDate calendarPeriod,
        @Param("cutoffDateTime") LocalDateTime cutoffDateTime,
        @Param("tenantCode") String tenantCode,
        Pageable pageable);

}

这是我得到的错误: 当我在URL中将cutoffDateTime参数保留为null时,它工作得很好,并且满足了null条件。但是当我给它一个LocalDateTime值(cutoffDateTime = 2018-01-01T23:44:05.012Z)时,出现以下错误:

“时间戳”:1533949418556,     “状态”:500,     “错误”:“内部服务器错误”,     “ exception”:“ org.springframework.orm.jpa.JpaSystemException” ... 在这里查询 \“;预期\” [,::,*,/,%,+,--,||,〜,!〜,NOT,LIKE,ILIKE,REGEXP,IS,IN,BETWEEN,AND,OR,,,) \“;

这仅在添加为null条件时发生。如果我删除条件,并为上述cutoffDateTime使用完全相同的URL和完全相同的LocalDateTime值,则效果很好。这是常见问题吗?

非常感谢,非常感谢您!

1 个答案:

答案 0 :(得分:0)

JPA尚不支持LocalDate / LocalDateTime。

您应提供一个AttributeConverter

@Converter(autoApply = true)
public class LocalDateTimeAttributeConverter implements AttributeConverter<LocalDateTime, Date> {

    @Override
    public Date convertToDatabaseColumn(LocalDateTime locDate) {

    }

    @Override
    public LocalDateTime convertToEntityAttribute(Date sqlDate) {

    }
}