index for entry lookup

This commit is contained in:
Athou
2013-07-27 17:22:31 +02:00
parent 6d396e1982
commit 223c2f464e
3 changed files with 18 additions and 7 deletions

View File

@@ -23,18 +23,20 @@ public class FeedEntryDAO extends GenericDAO<FeedEntry> {
protected static final Logger log = LoggerFactory.getLogger(FeedEntryDAO.class);
public FeedEntry findExisting(String guid, String url, Long feedId) {
public Long findExisting(String guid, Long feedId) {
CriteriaQuery<FeedEntry> query = builder.createQuery(getType());
CriteriaQuery<Long> query = builder.createQuery(Long.class);
Root<FeedEntry> root = query.from(getType());
query.select(root.get(FeedEntry_.id));
Predicate p1 = builder.equal(root.get(FeedEntry_.guidHash), DigestUtils.sha1Hex(guid));
Predicate p2 = builder.equal(root.get(FeedEntry_.url), url);
Predicate p3 = builder.equal(root.get(FeedEntry_.feed).get(Feed_.id), feedId);
Predicate p2 = builder.equal(root.get(FeedEntry_.feed).get(Feed_.id), feedId);
query.where(p1, p2, p3);
query.where(p1, p2);
List<FeedEntry> list = em.createQuery(query).getResultList();
TypedQuery<Long> q = em.createQuery(query);
limit(q, 0, 1);
List<Long> list = q.getResultList();
return Iterables.getFirst(list, null);
}

View File

@@ -51,7 +51,7 @@ public class FeedUpdateService {
*/
public void updateEntry(Feed feed, FeedEntry entry, List<FeedSubscription> subscriptions) {
FeedEntry existing = feedEntryDAO.findExisting(entry.getGuid(), entry.getUrl(), feed.getId());
Long existing = feedEntryDAO.findExisting(entry.getGuid(), feed.getId());
if (existing != null) {
return;
}