【问题标题】:How to convert LocalDateTime to LocalDate in JPA Query?如何在 JPA Query 中将 LocalDateTime 转换为 LocalDate?
【发布时间】:2020-12-08 12:31:06
【问题描述】:

我有字段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);

如何在此方法中获得LocalDateTime dateTimeLocalDate。现在我有一个例外

Parameter value [2020-01-31] did not match expected type [java.time.LocalDateTime]

我该如何解决?

【问题讨论】:

  • 所以你想要DateLocalDate
  • 我需要本地日期
  • @deHaar 他的意思是另一个方向
  • @Andronicus 哦,是的...刚刚意识到 ;-) 感谢您的指点...
  • 我不确定,但也许你可以在查询 (SQL) 中对其进行格式化,但这似乎不是最好的主意,即使可能......见this question,你可能最终会失去数据库独立性。

标签: java spring spring-boot spring-data-jpa jpql


【解决方案1】:

将查询保留在 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)。

【讨论】:

    【解决方案2】:

    您可以使用 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
            }
        } 
    

    【讨论】:

      猜你喜欢
      • 2019-01-11
      • 2012-02-18
      • 2022-01-11
      • 1970-01-01
      • 2016-04-10
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多