У меня есть постоянный объект с двумя Date
полями, как этотJPA сравнение метки времени не работает
@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
сравнения с другими полями не получится?
Вы можете установить свойство гибернации - '' show_sql' в true', чтобы увидеть запрос, генерируемый спящий режим. –
Вместо того, чтобы редактировать свой вопрос с ответом, вы должны опубликовать его как реальный ответ и принять его. Таким образом, вопрос будет отмечен как ответ, который он на самом деле. – Magnilex