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

时间:2018-06-12 16:28:10

标签: sql spring-data-jpa jpa-2.1 dateadd

我必须搜索超过6个月的行。我有插入时间(日期时间)作为我表中的一列。 如果它本来是一个SQL查询,它就像这样直截了当: -

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

但我使用的是JPA,所以我不得不这样写: -

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

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

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

  

使用name&#39; myRepository&#39;:init的调用创建bean时出错   方法失败;嵌套异常是java.lang.IllegalArgumentException:   查询失败验证....

我应该如何在上面的查询中添加字段?是否有可能通过JPA?

提前致谢。

1 个答案:

答案 0 :(得分:1)

感谢SPeL support,您可以尝试使用以下技巧:

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);
    }
}