问题描述
我的对象的字段为LocalDateTime dateTime
。而且我有以下存储库方法
@Query("select m from MyClass m " +
"where m.dateTime >= :startDate and m.dateTime <= :endDate")
findAllByTradeTimeBetween(@Param("startDate") LocalDate startDate,@Param("endDate") LocalDate endDate);
如何通过此方法获取LocalDate
中的LocalDateTime dateTime
。现在我有一个例外
Parameter value [2020-01-31] did not match expected type [java.time.LocalDateTime]
我该如何解决?
解决方法
将查询保留在LocalDateTime中并为LocalDate版本添加API似乎更加严格。
@Query("select m from MyClass m " +
"where m.dateTime >= :startDate and m.dateTime < :endDate")
findAllByTradeTimeBetween(@Param("startDate") LocalDateTime startDate,@Param("endDate") LocalDateTime endDate);
findAllByTradeTimeBetween(LocalDate startDate,LocalDate endDate) {
return findAllByTradeTimeBetween(startDate.atStartOfDay(),endDate.plusDays(1).atStartOfDay());
}
这会打开API的一些可疑用法(使用LocalDateTimes)。
,您可以使用javax.persistence.AttributeConverter来自动进行日期格式之间的转换。这是Converter类,它将自动将LocalDateTime对象转换为LocalDate,反之亦然:
@SuppressWarnings("UnusedDeclaration")
@Converter(autoApply = true)
public class LocalDateConverter implements AttributeConverter<LocalDateTime,LocalDate> {
@Override
public LocalDate convertToDatabaseColumn(LocalDateTime localDateTime) {
//convert localDateTime to LocalDate
}
@Override
public LocalDateTime convertToEntityAttribute(LocalDate localDate) {
// convert localDate to LocalDateTime
}
}