特定の日数を超えて存在したテーブルから行を削除しようとしています。行の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: org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:360) の org.hibernate.ejb.QueryImpl で、パラメーター値 [604800000] がタイプ [java.lang.Double] と一致しませんでしたorg.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:72) の .setParameter(QueryImpl.java:364)
私は何を間違っていますか?