Oracle + JPA - 使用INTERVAL查询

时间:2013-07-18 10:16:22

标签: oracle select jpa

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

这个说“意想不到的令牌:近[...]

    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();

顺便说一句,我可以将这个INTERVAL关键字与JPA一起使用吗?表达式在语法上是正确的,我用控制台测试它。

感谢帮助伙伴, 盖尔盖伊

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

这对我有用:

'10 minutes'::interval