Как вызвать метод dateAdd в SQL с помощью JPA @Query - PullRequest
0 голосов
/ 12 июня 2018

Я должен искать строку, которая старше 6 месяцев.Я вставил время (datetime) как один из столбцов в моей таблице.если бы это был SQL-запрос, это было бы просто так: -

select * from myTable where insertTime<=dateadd(month, -6, getDate());

Но я использую JPA, поэтому мне пришлось написать что-то вроде этого: -

select * from myTable where insertTime<=function('DATEADD',month, -6, function('getDate'));

Я не уверен, как поставить параметр месяца в приведенном выше запросе.

Я получаю следующую ошибку при запросе выше

Ошибка создания компонента с именем 'myRepository': сбой вызова метода init;Вложенное исключение - java.lang.IllegalArgumentException: проверка не удалась для запроса ....

Как поместить поле month в запросе выше?Возможно ли это через JPA?

Заранее спасибо.

1 Ответ

0 голосов
/ 12 июня 2018

Благодаря поддержке SPeL вы можете попробовать использовать следующий трюк:

public interface MyEntityRepo extends JpaRepository<MyEntity, Integer> {

    @Query("select e from MyEntity e where e.createdAt <= ?#{@myEntityRepo.sixMonthsBefore()}")
    List<MyEntity> getAllSixMonthsOld();

    default Instant sixMonthsBefore() {
        return Instant.now().minus(6, ChronoUnit.MONTHS);
    }
}
...