JPQL 在@Query 注释中检查大于小于今天的日期

Posted

技术标签:

【中文标题】JPQL 在@Query 注释中检查大于小于今天的日期【英文标题】:JPQL Check greater than less than date today in @Query annotation 【发布时间】:2015-06-07 18:11:56 【问题描述】:

我想使用 JPQL 检查天气 validTill 日期是否大于 today。我知道我可以通过以下方式实现这一点。

Query q = em.createQuery("select e from MyEntity e where e.validTill > :today ");

并传递:today 参数。 但这不是我想要的。我想在 Spring 中使用 CrudRepository 中的 @Query 注释来做到这一点。

这是我在CrudRepository中的代码段

@Query("SELECT e FROM MyEntity e WHERE e.validFrom < TODAY")
Iterable<MyEntity> findAllValid();

我不知道我应该在TODAY 的地方放什么才能得到今天的日期。请帮帮我。

【问题讨论】:

【参考方案1】:

我找到了。是这样的。。

@Query("SELECT e FROM MyEntity e WHERE e.validFrom < CURRENT_DATE")
Iterable<MyEntity> findAllValid();

CURRENT_DATE - 计算为当前日期(java.sql.Date 实例)。

CURRENT_TIME - 被评估为当前时间(java.sql.Time 实例)。

CURRENT_TIMESTAMP - 评估为当前时间戳,即日期和时间 (一个 java.sql.Timestamp 实例)。

【讨论】:

java.time.Instant有解决办法吗? 对于java.time.Instant,你可以将它作为参数传递,我认为@Query("SELECT e FROM MyEntity e WHERE e.validFrom &lt; :date") Iterable&lt;MyEntity&gt; findAllValid(Instant date);

以上是关于JPQL 在@Query 注释中检查大于小于今天的日期的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JPQL 中检查 UUID 空值?

在 JPQL 查询中检查集合上的 NULL 吗?

JPQL:当数据库中不存在对象时切换/案例

有没有办法让 jpql/native-query 区域不可知

如何在 JPQL 中正确执行 LIKE 和 CASE 子句

JPQL @Query - 无法准备语句异常