From 98d73ab747f4b7dcab026a4d39ac48d232fe7fc2 Mon Sep 17 00:00:00 2001 From: Athou Date: Thu, 25 Apr 2013 13:14:21 +0200 Subject: [PATCH] rewrote query (#53) --- src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java | 8 +++++--- src/main/java/com/commafeed/backend/dao/GenericDAO.java | 2 +- .../backend/services/FeedSubscriptionService.java | 3 --- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java index 2e3a60a2..420ccfee 100644 --- a/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java +++ b/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java @@ -6,12 +6,14 @@ import javax.ejb.Stateless; import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; +import javax.persistence.criteria.SetJoin; import org.apache.commons.codec.digest.DigestUtils; import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.FeedEntry; import com.commafeed.backend.model.FeedEntry_; +import com.commafeed.backend.model.Feed_; import com.google.api.client.util.Lists; import com.uaihebert.model.EasyCriteria; @@ -41,11 +43,11 @@ public class FeedEntryDAO extends GenericDAO { public List findByFeed(Feed feed, int offset, int limit) { CriteriaQuery query = builder.createQuery(getType()); Root root = query.from(getType()); - query.where(builder.isMember(feed, root.get(FeedEntry_.feeds))); + SetJoin feedsJoin = root.join(FeedEntry_.feeds); + query.where(builder.equal(feedsJoin.get(Feed_.id), feed.getId())); query.orderBy(builder.desc(root.get(FeedEntry_.updated))); TypedQuery q = em.createQuery(query); - q.setFirstResult(offset); - q.setMaxResults(limit); + limit(q, offset, limit); return q.getResultList(); } } diff --git a/src/main/java/com/commafeed/backend/dao/GenericDAO.java b/src/main/java/com/commafeed/backend/dao/GenericDAO.java index edfdf8b5..23f1f7e2 100644 --- a/src/main/java/com/commafeed/backend/dao/GenericDAO.java +++ b/src/main/java/com/commafeed/backend/dao/GenericDAO.java @@ -129,7 +129,7 @@ public abstract class GenericDAO { return criteria.getResultList(); } - protected void limit(TypedQuery query, int offset, + protected void limit(TypedQuery query, int offset, int limit) { if (offset > -1) { query.setFirstResult(offset); diff --git a/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java b/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java index 80958ae4..6a25b661 100644 --- a/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java +++ b/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java @@ -48,9 +48,6 @@ public class FeedSubscriptionService { sub.setTitle(title.substring(0, Math.min(128, title.length()))); feedSubscriptionDAO.saveOrUpdate(sub); - // TODO optimize this request, it takes ages to complete, skipping for - // now - newSubscription = false; if (newSubscription) { List statuses = Lists.newArrayList(); List allEntries = feedEntryDAO.findByFeed(feed, 0, 10);