【发布时间】:2018-02-13 12:41:15
【问题描述】:
我正在开发一个具有内置数据库维护功能的 Hibernate / Spring 应用程序。每 15 分钟它会查看某些表,并根据某些参数清除旧记录。例如,在我的 LogEntry 实体的情况下,我基于 2 个参数进行清除:记录的年龄和表中有多少记录。在第一种情况下,我正在做这样的事情:
@Override
public int deleteExpiredEntries(int systemLogKeepTimeInDays, int systemLogMaxEntries)
{
Session session = getSession();
Query query = session.createQuery("DELETE FROM LogEntry l WHERE l.time < :p");
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -systemLogKeepTimeInDays);
return query.setParameter("p", cal.getTime()).executeUpdate();
}
当使用类似流程运行此维护时,我正在尝试考虑始终保持 5000 条记录的最佳方式。我想过使用 Id 列并清除 ID 大于 5000 的任何内容,但这实际上会清除新记录而不是旧记录!
你会如何解决这个问题?
谢谢!
【问题讨论】:
标签: java database hibernate maintenance