Thi*_*ilo 13 datetime jpa jpql
有没有办法在JPA查询中引用当前时间的日期范围条件(跨数据库兼容)?
我可以
SELECT m FROM Mail m WHERE m.sentAt < :date
Run Code Online (Sandbox Code Playgroud)
但我想在不必绑定参数的情况下这样做(这样可以将其配置为命名查询存储库的一部分,并且日期计算逻辑不必输入调用代码).
因此,:date我不需要"currentTime减去3分钟"作为硬代码字面值.
JPA 支持 CURRENT_TIMESTAMP 和 CURRENT_TIME 函数。
https://en.wikibooks.org/wiki/Java_Persistence/JPQL#Functions
JPA 规范没有日期函数,但一些 JPA 提供程序(例如 EclipseLink)有。
http://java-persistence-performance.blogspot.com/2012/05/jpql-vs-sql-have-both-with-eclipselink.html
JPA 2.1 还定义了 FUNCTION 运算符来调用数据库函数。
在 EclipseLink 我会尝试,
SELECT m FROM Mail m WHERE m.sentAt < SQL("(sysdate - interval '3' minute)")
Run Code Online (Sandbox Code Playgroud)
或者,
SELECT m FROM Mail m WHERE m.sentAt < SQL("(? - interval '3' minute)", CURRENT_TIMESTAMP)
Run Code Online (Sandbox Code Playgroud)
如果您使用Hibernate JPA实现和Oracle方言,那么您可以使用SYSDATE返回当前日期和时间的函数。如果加 1,SYSDATE就会增加一天。
还支持添加分数:
sysdate + 1/24将增加一个小时 sysdate + 1/(24*60)将添加一分钟 sysdate + 1/(24*60*60)将添加第二个因此,我需要“currentTime minus 3 分钟”作为硬编码文字,而不是 :date 。
sysdate - 3/(24*60)将从当前日期和时间减去 3 分钟:
SELECT m FROM Mail m WHERE m.sentAt < sysdate - 3/(24*60)
Run Code Online (Sandbox Code Playgroud)
超过3分钟的记录将被返回,并且不需要参数绑定。
| 归档时间: |
|
| 查看次数: |
18186 次 |
| 最近记录: |