cleanup by batch of 1000

This commit is contained in:
Athou
2013-06-16 15:40:33 +02:00
parent edcd54640a
commit 56f4f33707
2 changed files with 17 additions and 7 deletions

View File

@@ -20,10 +20,18 @@ public class DatabaseCleaner {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MINUTE, -1 * (int) unit.toMinutes(value));
List<FeedEntry> entries = feedEntryDAO.findByInserted(cal.getTime());
for (FeedEntry entry : entries) {
feedEntryDAO.delete(entry.getStatuses());
}
feedEntryDAO.delete(entries);
int deleted = -1;
do {
List<FeedEntry> entries = feedEntryDAO.findByInserted(
cal.getTime(), 1000);
deleted = entries.size();
for (FeedEntry entry : entries) {
feedEntryDAO.delete(entry.getStatuses());
}
feedEntryDAO.delete(entries);
} while (deleted != 0);
}
}

View File

@@ -56,12 +56,14 @@ public class FeedEntryDAO extends GenericDAO<FeedEntry> {
return list;
}
public List<FeedEntry> findByInserted(Date olderThan) {
public List<FeedEntry> findByInserted(Date olderThan, int max) {
CriteriaQuery<FeedEntry> query = builder.createQuery(getType());
Root<FeedEntry> root = query.from(getType());
query.where(builder.lessThan(root.get(FeedEntry_.inserted), olderThan));
return em.createQuery(query).getResultList();
TypedQuery<FeedEntry> q = em.createQuery(query);
q.setMaxResults(max);
return q.getResultList();
}
public List<FeedEntry> findByFeed(Feed feed, int offset, int limit) {