How do I query “older than three minutes” in JPA?

前端 未结 2 1798
情深已故
情深已故 2020-12-10 02:49

Is there a way to put a date range condition referencing the current time in a JPA query (that is compatible across databases)?

I can do

SELECT m FR         


        
相关标签:
2条回答
  • 2020-12-10 03:06

    JPA supports the CURRENT_TIMESTAMP and CURRENT_TIME functions.

    https://en.wikibooks.org/wiki/Java_Persistence/JPQL#Functions

    The JPA spec does not have date functions, but some JPA providers such as EclipseLink do.

    http://java-persistence-performance.blogspot.com/2012/05/jpql-vs-sql-have-both-with-eclipselink.html

    JPA 2.1 also defines the FUNCTION operator to call database functions.

    In EclipseLink I would try,

    SELECT m FROM Mail m WHERE m.sentAt < SQL("(sysdate - interval '3' minute)")
    

    or,

    SELECT m FROM Mail m WHERE m.sentAt < SQL("(? - interval '3' minute)", CURRENT_TIMESTAMP)
    
    0 讨论(0)
  • 2020-12-10 03:09

    If you are using Hibernate JPA implementation and an Oracle dialect, then you can use SYSDATE function which returns current date and time. If you add 1 to SYSDATE it will add one day.

    Adding fractions is also supported:

    • sysdate + 1/24 will add an hour
    • sysdate + 1/(24*60) will add a minute
    • sysdate + 1/(24*60*60) will add a second

    So instead of :date I need "currentTime minus 3 minutes" as a hard-code literal.

    sysdate - 3/(24*60) will subtract 3 minutes from current date and time:

    SELECT m FROM Mail m WHERE m.sentAt < sysdate - 3/(24*60)
    

    Records older than 3 minutes will be returned and no parameter binding is needed.

    0 讨论(0)
提交回复
热议问题