8

我的数据库表 LASTUPDATED 中有一个 Timestamp 列,我通过轮询来决定是否应该更新一行。如果记录在过去 10 分钟内没有更新,我会更新它。我想将日期处理委托给数据库,但以下都不起作用:

这个说“预期的令牌::附近[...]”

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

这个说“意外的令牌:'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 关键字吗?该表达式在语法上是正确的,我用控制台对其进行了测试。

谢谢你们的帮助,Gergely

4

2 回答 2

8

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
于 2013-07-18T11:27:33.610 回答
0

这对我有用:

'10 minutes'::interval
于 2019-10-01T07:26:06.607 回答