我有一个带有两个Date
字段的持久对象,像这样
@Temporal(TemporalType.TIMESTAMP)
private Date generated;
@Temporal(TemporalType.TIMESTAMP)
private Date expirationTime;
在对象构造expirationTime
上,基于generated
字段进行初始化
this.expirationTime = new Date(generated.getTime() + ttlMillis);
现在我正在尝试使用 JPA 查询从数据库中删除所有过期的对象
Query q = em.createQuery("delete from MyObject t where CURRENT_TIMESTAMP > t.expirationTime");
q.executeUpdate();
但是运行一个简单的测试
MyObject o = new MyObject(somePastDate, someTTL);
em.persist(o);
... create the query above
q.executeUpate();
显示没有行被删除。关于我做错了什么的任何线索?我在 HSQLDb 上运行测试并使用 Hibernate 作为我的 JPA 提供程序。
编辑:已解决,但我不确定为什么这个版本应该以不同的方式工作。
Query q = em.createQuery("delete from MyObject t where :now > t.expirationTime");
q.setParameter("now", new Date());
q.executeUpdate();
CURRENT_TIMESTAMP
如果与其他字段的比较失败有什么用?