我需要你的帮助,我被困了2天。想到处寻找解决方案,但没有运气。
我正在尝试将以下查询转换为JPA查询。
delete from the_table
where the_timestamp < now() - interval '7 days'
JPA查询
EntityManagerFactory em = tx.getEntityManagerFactory();
em.createEntityManager().createNamedQuery("delete from the_table where the_timestamp < now() - interval ?").setParameter(1, "'" +"7 days"+ "'").executeUpdate();
我收到以下错误: -
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute statement
还尝试使用基于参数的绑定,但问题仍然相同。下面是代码段
EntityManagerFactory em = tx.getEntityManagerFactory();
em.createEntityManager().createNamedQuery("delete from the_table where the_timestamp < now() - interval :deleteOlderRecords").setParameter("deleteOlderRecords", "'" +"7 days"+ "'").executeUpdate();
有人可以指出这里有什么问题吗?
答案 0 :(得分:0)
不了解JPA,但在JDBC中你无法通过这样的间隔。你需要使用这样的东西:
"delete from the_table where the_timestamp < now() - interval '1' day * ?"
然后将天数作为整数传递
答案 1 :(得分:0)
您的查询无效(JPQL中没有关键字“interval” - 阅读任何体面的JPQL参考)。如果要输入时间戳,则最好使用参数。或者,您可以使用此转义显示的JDBC转义语法 http://www.datanucleus.org/products/accessplatform_4_1/jpa/jpql.html#literals