【问题标题】:Datetime arithmetic in Spring JPA query annotationSpring JPA 查询注释中的日期时间算法
【发布时间】:2019-03-14 13:26:28
【问题描述】:

我有一个带有created 列的表,该列的类型为DATETIME,并在创建时设置为CURRENT_TIMESTAMP

我还有一个 Spring JPA 存储库来处理所述表,并希望创建一个带注释的查询来查找存在时间超过 timeout 时间的行,采用以下样式:

@Query("SELECT e FROM Entity e WHERE (e.created < CURRENT_TIMESTAMP - timeout")
List<Entity> findOldEntries(@Param("timeout") int timeout);

这个查询的正确语法是什么,它期望的“超时”单位是什么?

【问题讨论】:

    标签: java spring datetime jpa


    【解决方案1】:

    AFAIK JPA 不支持时间段。或者,您可以使用SpEL

    @Query("SELECT e FROM Entity e WHERE (e.created < ?#{@yourRepo.secondsBefore(#timeout))}")
    List<Entity> findOldEntries(@Param("timeout") int timeout);
    
    // add a method that returns an Instant that matches your time
    default Instant secondsBefore(int seconds) {
        return Instant.now().minus(seconds, ChronoUnit.SECONDS);
    }
    

    【讨论】:

    • 问题:(1)SpEL 如何将@yourRepo 与存储库绑定? @yourRepo 变量是否总是指向当前存储库? (2)实际发生了什么:(2A)是带约束提交的查询还是(2B)结果集被过滤了?
    猜你喜欢
    • 2016-04-04
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    相关资源
    最近更新 更多