如何使用 JPA @Query 调用 SQL dateAdd 方法

dha*_*ram 1 sql dateadd spring-data-jpa jpa-2.1

我必须搜索超过 6 个月的行。我已插入时间(日期时间)作为表中的列之一。如果它是一个 sql 查询,它就像这样直接:-

select * from myTable where insertTime<=dateadd(month, -6, getDate());
Run Code Online (Sandbox Code Playgroud)

但我使用的是 JPA,所以我必须写这样的东西:-

select * from myTable where insertTime<=function('DATEADD',month, -6, function('getDate'));
Run Code Online (Sandbox Code Playgroud)

我不确定如何在上面的查询中添加月份参数。

我在上述查询中收到以下错误

创建名称为“myRepository”的 bean 时出错:调用 init 方法失败;嵌套异常是 java.lang.IllegalArgumentException: 查询验证失败 ....

我应该如何在上面的查询中添加月份字段?可以通过JPA吗?

提前致谢。

Cep*_*pr0 5

感谢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);
    }
}
Run Code Online (Sandbox Code Playgroud)