我尝试从表中删除超过给定时间的行。行的start
是时间戳。
EntityManager em = ...
long interval = ... // long value read from a properties file
String template = "DELETE FROM %s WHERE current_timestamp() - start > :interval";
String jpql = String.format(template , MyClass.class.getCanonicalName());
Query q = em.createQuery(jpql);
q.setParameter("interval", TimeUnit.DAYS.toMillis(interval));
q.executeUpdate();
MyClass.java
@Entity
@Table(name = "ROWS")
public class MyClass implements Serializable {
private static final long serialVersionUID = 6070604872038740340L;
puyblic MyClass() {
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "start", columnDefinition="TIMESTAMP WITH TIME ZONE")
@Temporal(TemporalType.TIMESTAMP)
private Date start;
// getters ans setters...
}
但是,我得到以下异常:
原因:java.lang.IllegalArgumentException:参数值 [604800000] 与 org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:360) 的 org.hibernate.ejb.QueryImpl 中的类型 [java.lang.Double] 不匹配.setParameter(QueryImpl.java:364) 在 org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:72)
我究竟做错了什么 ?