我有一个带有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);
此查询的正确语法是什么,它期望“超时”的单位是什么?
答案 0 :(得分: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);
}