Date
このように、2 つのフィールドを持つ永続オブジェクトがあります。
@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
他のフィールドとの比較が失敗した場合の使用は何ですか?