h sql, JpaRepository, именованные параметры в строку - PullRequest
1 голос
/ 03 августа 2020

Теперь я пытаюсь

public interface DishRepository extends JpaRepository<Dish,Integer> {
      @Query("select d from Dish d where d.menu.date >=:startDate and d.menu.date<=:endDate")
      List<Dish> getBetween(@Param("startDate") @NotNull LocalDate startDate,
                            @Param("endDate") @NotNull LocalDate endDate);

и получаю сообщение об ошибке, так как

DEBUG org.springframework.web.servlet.FrameworkServlet.logResult:1101 - Failed to complete request: org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [2020-07-02] did not match expected type [java.time.LocalDateTime (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [2020-07-02] did not match expected type [java.time.LocalDateTime (n/a)]

но все хорошо, если

@Query("select d from Dish d where d.menu.date >='2020-07-02' and d.menu.date<='2020-07-03'")

Как преобразовать именованные параметры в строки (:startDate -> '2020-07-02')? Спасибо за любую помощь.

1 Ответ

1 голос
/ 03 августа 2020

Вы должны использовать LocalDateTime в качестве параметра. Вы можете создать LocalDateTime из LocalDate со временем таким образом

LocalDateTime startOfDay = LocalDateTime.of(startDate, LocalTime.MIN);
LocalDateTime endOfDay = LocalDateTime.of(endDate, LocalTime.MAX);

и использовать их в запросе

  @Query("select d from Dish d where d.menu.date >=:startDate and d.menu.date<=:endDate")
  List<Dish> getBetween(@Param("startDate") @NotNull LocalDateTime startDate,
                        @Param("endDate") @NotNull LocalDateTime endDate);
...