Spring Boot Records старше 5 лет в Oracle - PullRequest
1 голос
/ 29 апреля 2020

Запрос:

@Query("select o from Order o where o.creationDate < add_months(sysdate, -60)")

add_months невозможно в запросе JPA. Как я могу получить записи старше пяти лет?

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

В JPQL такой функции нет для работы с датами.

Однако у вас есть две опции:

  1. Использовать нативную SQL с опцией nativeQuery = true
  2. Вычислить дату по вашему 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);
0 голосов
/ 29 апреля 2020

попробуйте это

SELECT * FROM Order<br> WHERE DATEDIFF(YEAR, o.creationDate, GetDate()) >= 5

или как это

SELECT * FROM order WHERE o.creationDate < DATE_SUB(NOW(),INTERVAL 5 YEAR)

...