2011-12-05 169 views
2

我试图编写一个JPQL语句,删除时间戳大于1天的表中的所有值。现在我有一个工作语句,删除所有比当前时间更早的值,但我需要修改它,以便删除超过1天的值。JPQL,删除值超过1天的时间戳

我怎么能修改此声明:

Query q = em.createQuery("DELETE FROM Statustable t WHERE t.ts < CURRENT_TIMESTAMP"); 

我一直在试图寻找如何操纵CURRENT_TIMESTAMP值,这样我可以做类似的JPA API“(CURRENT_TIMESTAMP -1)”到表示“大于1天”。我知道语法是错误的,但它应该可以帮助你看到我想要做的事情。

回答

7

JPA的日期功能是非常有限的,但你的问题可以很容易地通过减去1天到Java中的当前日期来解决,然后使用参数化查询:

Date yesterday = DateUtils.addDays(new Date(), -1); 
Query q = em.createQUery("DELETE FROM Statustable t WHERE t.ts < :yesterday"); 
q.setParameter("yesterday", yesterday); 
+0

显然,我不加入它正确的参数列表,因为我收到错误:“查询执行过程中提供的参数列表中没有找到昨天查询参数。” – Randnum

+0

请参阅我的编辑以了解设置参数的示例。 –

+0

adamındibisin。 :) 好答案.. – ozgur