我的数据库表中有一个时间戳列 LASTUPDATED,我通过轮询来决定是否应更新某行。如果记录在过去 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 关键字吗?该表达式在语法上是正确的,我用控制台测试了它。
感谢各位的帮助,
盖尔盖利
JPA和Hibernate不支持interval,终于找到了...
还支持日期算术,尽管方式更加有限。这部分是由于数据库支持的差异,部分是由于查询语言本身缺乏对 INTERVAL 定义的支持。来源:http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html/ch11.html 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)