我遇到以下问题:
我有一个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值,则效果很好。这是常见问题吗?
非常感谢,非常感谢您!
答案 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) {
}
}