В JPQL такой функции нет для работы с датами.
Однако у вас есть две опции:
- Использовать нативную SQL с опцией
nativeQuery = true
- Вычислить дату по вашему Java коду и передать результат в запрос
Итак, вы можете использовать нативный SQL, добавив атрибут nativeQuery
в @Query
:
@Query(nativeQuery = true, value = "select * from Order o where o.creationDate < add_months(sysdate, -60)")
Использование nativeQuery
может быть хитрым при монтировании объекта. Но проблема такого рода выходит за рамки вопроса.
Другой альтернативой по-прежнему является использование JPQL, но вычисление старой даты перед вызовом SQL:
LocalDateTime oldDate = LocalDateTime.now().minusMonths(60);
Изменение @Query
для получения даты в качестве параметра:
@Query("select o from Order o where o.creationDate < ?1 ")
List<Order> findOldOrders(LocalDateTime oldDate);
И вызов ее:
List<Order> orders = repository.findOldOrders(oldDate);