【问题标题】:Oracle + JPA - querying with INTERVALOracle + JPA - 使用 INTERVAL 查询
【发布时间】:2013-07-17 05:44:05
【问题描述】:

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

这个说“enexpected 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();

这个说“unexpected token: '10' near[...]

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

这个说 unexpected token: '?'附近[...]

    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 关键字吗?该表达式在语法上是正确的,我用控制台对其进行了测试。

感谢大家的帮助, 格格利

【问题讨论】:

    标签: oracle select jpa


    【解决方案1】:

    这对我有用:

    '10 minutes'::interval
    

    【讨论】:

      【解决方案2】:

      JPA和Hibernate不支持interval,终于找到了……

      还支持日期算术,尽管方式更有限。这部分是由于数据库支持的差异,部分是由于查询语言本身缺乏对 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-01
        • 2021-07-05
        • 1970-01-01
        • 2018-07-13
        • 2012-11-15
        • 2021-10-24
        • 2016-01-22
        • 1970-01-01
        相关资源
        最近更新 更多