【问题标题】:Hibernate : HQL query to directly compare timestamp from database valueHibernate:HQL 查询直接比较数据库值的时间戳
【发布时间】:2015-06-05 19:43:41
【问题描述】:
  • 我正在开发一个使用 Hibernate 作为 ORM 和 PostgreSQL 数据库的 Spring-MVC 应用程序,其中我保存在一个 数据库行一些值(很明显)。有了这些信息,我也 输入时保存 TimeStamp(java.sql.TimeStamp)。为了 我想删除超过 5 分钟的条目的一些原因。

我怎么可能给出一个带有时间戳的 HQL 查询,比如 if timestamp>oldTimestamp 然后删除该行。直到现在我都有这样的东西:

 @Override
    @Scheduled(fixedRate = 100000)
    public void removeStaleLocks() {
        session = this.sessionFactory.getCurrentSession();
    //Timestamp timestamp = // current timestamp;
        Query query = session.createQuery("delete from NoteLock as nl where nl.timeStamp=:timeStamp");
        query.setParameter("timeStamp",timeStamp);
        query.executeUpdate();
        session.flush();
    }

我想做的是向查询传递一个参数,将其用作当前时间戳,表示这是当前时间,并删除所有超过 5 分钟的笔记。你能帮忙的话,我会很高兴。非常感谢。

【问题讨论】:

  • 对不起,奇怪的主题行,不知道该写什么。

标签: spring hibernate postgresql spring-mvc hql


【解决方案1】:
long now = System.currentTimeMillis();
long nowMinus5Minutes = now - (5L * 60L * 1000L);
Timestamp nowMinus5MinutesAsTimestamp = new Timestamp(nowMinus5Minutes);

Query query = session.createQuery("delete from NoteLock as nl where nl.timeStamp < :limit");
query.setParameter("limit", nowMinus5MinutesAsTimestamp);
query.executeUpdate();

【讨论】:

  • 最好使用long nowMinus5Minutes = now - Duration.ofMinutes(5).toMillis(); 来避免使用幻数计算纳秒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-05
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多