diff --git a/pom.xml b/pom.xml
index 103f54e9..4db521a4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -44,6 +44,7 @@
1.6
1.6
+ -proc:none
@@ -89,6 +90,52 @@
+
+ org.bsc.maven
+ maven-processor-plugin
+ 2.2.1
+
+
+ process
+
+ process
+
+ generate-sources
+
+
+ org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
+
+ target/metamodel
+
+
+
+
+
+ org.hibernate
+ hibernate-jpamodelgen
+ 1.2.0.Final
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ 1.8
+
+
+ add-source
+ generate-sources
+
+ add-source
+
+
+
+ target/metamodel
+
+
+
+
+
diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryStatusService.java b/src/main/java/com/commafeed/backend/dao/FeedEntryStatusService.java
index 64a26898..b472312e 100644
--- a/src/main/java/com/commafeed/backend/dao/FeedEntryStatusService.java
+++ b/src/main/java/com/commafeed/backend/dao/FeedEntryStatusService.java
@@ -9,13 +9,19 @@ import javax.inject.Inject;
import javax.persistence.NoResultException;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
import org.apache.commons.lang.StringUtils;
import com.commafeed.backend.model.Feed;
import com.commafeed.backend.model.FeedCategory;
import com.commafeed.backend.model.FeedEntryStatus;
+import com.commafeed.backend.model.FeedEntryStatus_;
+import com.commafeed.backend.model.FeedEntry_;
import com.commafeed.backend.model.FeedSubscription;
+import com.commafeed.backend.model.FeedSubscription_;
import com.commafeed.backend.model.User;
import com.commafeed.frontend.utils.ModelFactory.MF;
import com.google.api.client.util.Lists;
@@ -56,20 +62,38 @@ public class FeedEntryStatusService extends GenericDAO {
public List getStatusesByKeywords(User user,
String keywords, int offset, int limit) {
- TypedQuery query = em.createNamedQuery(
- "EntryStatus.allByKeywords", FeedEntryStatus.class);
- query.setParameter("user", user);
String joinedKeywords = StringUtils.join(
keywords.toLowerCase().split(" "), "%");
- query.setParameter("keywords", "%" + joinedKeywords + "%");
+ joinedKeywords = "%" + joinedKeywords + "%";
+
+ CriteriaQuery query = builder.createQuery(getType());
+ Root root = query.from(getType());
+
+ List predicates = Lists.newArrayList();
+ predicates.add(builder.equal(root.get(FeedEntryStatus_.subscription)
+ .get(FeedSubscription_.user), user));
+
+ Predicate content = builder.like(
+ builder.lower(root.get(FeedEntryStatus_.entry).get(
+ FeedEntry_.content)), joinedKeywords);
+ Predicate title = builder.like(
+ builder.lower(root.get(FeedEntryStatus_.entry).get(
+ FeedEntry_.title)), joinedKeywords);
+ predicates.add(builder.or(content, title));
+
+ query.where(predicates.toArray(new Predicate[0]));
+ query.orderBy(builder.desc(root.get(FeedEntryStatus_.entry).get(
+ FeedEntry_.updated)));
+
+ TypedQuery q = em.createQuery(query);
if (offset > -1) {
- query.setFirstResult(offset);
+ q.setFirstResult(offset);
}
if (limit > -1) {
- query.setMaxResults(limit);
+ q.setMaxResults(limit);
}
- return query.getResultList();
+ return q.getResultList();
}
public List getStatuses(User user, boolean unreadOnly) {
@@ -78,18 +102,27 @@ public class FeedEntryStatusService extends GenericDAO {
public List getStatuses(User user, boolean unreadOnly,
int offset, int limit) {
- String queryName = unreadOnly ? "EntryStatus.unread"
- : "EntryStatus.all";
- TypedQuery query = em.createNamedQuery(queryName,
- FeedEntryStatus.class);
- query.setParameter("user", user);
+ CriteriaQuery query = builder.createQuery(getType());
+ Root root = query.from(getType());
+
+ List predicates = Lists.newArrayList();
+ predicates.add(builder.equal(root.get(FeedEntryStatus_.subscription)
+ .get(FeedSubscription_.user), user));
+ if (unreadOnly) {
+ predicates.add(builder.isFalse(root.get(FeedEntryStatus_.read)));
+ }
+ query.where(predicates.toArray(new Predicate[0]));
+ query.orderBy(builder.desc(root.get(FeedEntryStatus_.entry).get(
+ FeedEntry_.updated)));
+
+ TypedQuery q = em.createQuery(query);
if (offset > -1) {
- query.setFirstResult(offset);
+ q.setFirstResult(offset);
}
if (limit > -1) {
- query.setMaxResults(limit);
+ q.setMaxResults(limit);
}
- return query.getResultList();
+ return q.getResultList();
}
/**
@@ -115,20 +148,30 @@ public class FeedEntryStatusService extends GenericDAO {
public List getStatuses(Feed feed, User user,
boolean unreadOnly, int offset, int limit) {
- String queryName = unreadOnly ? "EntryStatus.unreadByFeed"
- : "EntryStatus.allByFeed";
- TypedQuery query = em.createNamedQuery(queryName,
- FeedEntryStatus.class);
- query.setParameter("feed", feed);
- query.setParameter("user", user);
+
+ CriteriaQuery query = builder.createQuery(getType());
+ Root root = query.from(getType());
+
+ List predicates = Lists.newArrayList();
+ predicates.add(builder.equal(root.get(FeedEntryStatus_.subscription)
+ .get(FeedSubscription_.user), user));
+ predicates.add(builder.equal(root.get(FeedEntryStatus_.subscription)
+ .get(FeedSubscription_.feed), feed));
+ if (unreadOnly) {
+ predicates.add(builder.isFalse(root.get(FeedEntryStatus_.read)));
+ }
+ query.where(predicates.toArray(new Predicate[0]));
+ query.orderBy(builder.desc(root.get(FeedEntryStatus_.entry).get(
+ FeedEntry_.updated)));
+
+ TypedQuery q = em.createQuery(query);
if (offset > -1) {
- query.setFirstResult(offset);
+ q.setFirstResult(offset);
}
if (limit > -1) {
- query.setMaxResults(limit);
+ q.setMaxResults(limit);
}
-
- return query.getResultList();
+ return q.getResultList();
}
public List getStatuses(List categories,
@@ -138,19 +181,30 @@ public class FeedEntryStatusService extends GenericDAO {
public List getStatuses(List categories,
User user, boolean unreadOnly, int offset, int limit) {
- String queryName = unreadOnly ? "EntryStatus.unreadByCategories"
- : "EntryStatus.allByCategories";
- TypedQuery query = em.createNamedQuery(queryName,
- FeedEntryStatus.class);
- query.setParameter("categories", categories);
- query.setParameter("user", user);
+
+ CriteriaQuery query = builder.createQuery(getType());
+ Root root = query.from(getType());
+
+ List predicates = Lists.newArrayList();
+ predicates.add(builder.equal(root.get(FeedEntryStatus_.subscription)
+ .get(FeedSubscription_.user), user));
+ predicates.add(root.get(FeedEntryStatus_.subscription)
+ .get(FeedSubscription_.category).in(categories));
+ if (unreadOnly) {
+ predicates.add(builder.isFalse(root.get(FeedEntryStatus_.read)));
+ }
+ query.where(predicates.toArray(new Predicate[0]));
+ query.orderBy(builder.desc(root.get(FeedEntryStatus_.entry).get(
+ FeedEntry_.updated)));
+
+ TypedQuery q = em.createQuery(query);
if (offset > -1) {
- query.setFirstResult(offset);
+ q.setFirstResult(offset);
}
if (limit > -1) {
- query.setMaxResults(limit);
+ q.setMaxResults(limit);
}
- return query.getResultList();
+ return q.getResultList();
}
public void markFeedEntries(User user, Feed feed, Date olderThan) {
diff --git a/src/main/resources/META-INF/orm.xml b/src/main/resources/META-INF/orm.xml
index 1a9c0353..be8f7306 100644
--- a/src/main/resources/META-INF/orm.xml
+++ b/src/main/resources/META-INF/orm.xml
@@ -8,37 +8,9 @@
select u FROM User u WHERE lower(u.name)=:name
-
-
- select s from FeedEntryStatus s where s.subscription.user=:user and s.id=:id
-
-
- select s from FeedEntryStatus s where s.subscription.user=:user and s.read=false order by s.entry.updated desc
-
-
- select s from FeedEntryStatus s where s.subscription.user=:user order by s.entry.updated desc
-
-
-
- select s from FeedEntryStatus s where s.subscription.user=:user and s.subscription.feed=:feed and s.read=false order by s.entry.updated desc
-
select s.subscription.id, count(s) from FeedEntryStatus s where s.subscription.user=:user and s.read=false group by s.subscription.id
-
- select s from FeedEntryStatus s where s.subscription.user=:user and s.subscription.feed=:feed order by s.entry.updated desc
-
-
- select s from FeedEntryStatus s where s.subscription.user=:user and s.subscription.category in (:categories) and s.read=false order by s.entry.updated desc
-
-
- select s from FeedEntryStatus s where s.subscription.user=:user and s.subscription.category in (:categories) order by s.entry.updated desc
-
-
-
- select s from FeedEntryStatus s where s.subscription.user=:user and (lower(s.entry.content) like :keywords or lower(s.entry.title) like :keywords) order by s.entry.updated desc
-
-
\ No newline at end of file