我的数据库表LASTUPDATED中有一个Timestamp列,我通过轮询来决定是否应更新行。如果记录在最近10分钟内未更新,我将对其进行更新。我想将日期处理委派给数据库,但以下任何一项均无效:

这个人说“预期的 token ::near [...]”

    Query query = entityManager.createQuery("SELECT x FROM MyEntity x WHERE x.lastUpdated < SYSTIMESTAMP - INTERVAL :olderThen MINUTE");
    query.setParameter("olderThen", 10);
    list = query.getResultList();

这个人说“意外 token :'[10]附近[...]
    Query query = entityManager.createQuery("SELECT x FROM MyEntity x WHERE x.lastUpdated < SYSTIMESTAMP - INTERVAL '10' MINUTE");
    list = query.getResultList();

而这个说了意外的记号:“?”靠近[...]
    Query query = entityManager.createQuery("SELECT x FROM MyEntity x WHERE x.lastUpdated < SYSTIMESTAMP - INTERVAL ?1 MINUTE");
    query.setParameter(1, 10);
    list = query.getResultList();

顺便说一下,我可以在JPA上使用此INTERVAL关键字吗?该表达式在语法上是正确的,我在控制台上对其进行了测试。

谢谢你们的帮助,
热心地

最佳答案

JPA和Hibernate不支持间隔,最后我找到了...

日期算术也受支持,尽管以更有限的方式。这部分是由于数据库支持方面的差异,部分是由于查询语言本身缺少对INTERVAL定义的支持。
资料来源:http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html/ch11.html

只能使用BETWEEN关键字。
小心

顺便说一句,正确的表达是:

     select x from MyEntity x where cast((systimestamp - (1/24/60) * 10) as timestamp) between lastUpdated and systimestamp

关于Oracle + JPA-使用INTERVAL查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17720674/

10-15 10:54