2013-07-18 46 views
3

我在我的數據庫表中有一個Timestamp列,LASTUPDATED,我輪詢決定是否應該更新一行。如果記錄在最近10分鐘內沒有更新,我會更新它。我想委託日期搬運到DB,但沒有以下作品:Oracle + JPA - 使用INTERVAL查詢

這人說「enexpected令牌:近[...]」

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?表達是正確的語法,我與控制檯進行了測試。

感謝您的幫助傢伙, 蓋爾蓋伊

回答

5

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