【问题标题】:How to call SQL dateAdd method using JPA @Query如何使用 JPA @Query 调用 SQL dateAdd 方法
【发布时间】:2018-11-22 03:06:31
【问题描述】:

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

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

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

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

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

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

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

我应该如何将 month 字段放在上面的查询中?可以通过 JPA 实现吗?

提前致谢。

【问题讨论】:

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


    【解决方案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);
        }
    }
    

    【讨论】:

    • 我的男人,你是个天才。我真的很需要这个在我的生活中。
    猜你喜欢
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    相关资源
    最近更新 更多