如何在JPA查询中将LocalDateTime转换为LocalDate?

问题描述

我的对象的字段为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
        }
    }