diff --git a/pom.xml b/pom.xml
index 5b75ecbb..385cf1cf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,7 +17,7 @@
1.8
0.9.0-rc1
4.0
- 3.6.4
+ 4.0.2
1.5.0
@@ -265,14 +265,14 @@
- com.mysema.querydsl
+ com.querydsl
querydsl-apt
${querydsl.version}
provided
hibernate
- com.mysema.querydsl
+ com.querydsl
querydsl-jpa
${querydsl.version}
diff --git a/src/main/java/com/commafeed/backend/dao/FeedCategoryDAO.java b/src/main/java/com/commafeed/backend/dao/FeedCategoryDAO.java
index 3e788974..6fc78806 100644
--- a/src/main/java/com/commafeed/backend/dao/FeedCategoryDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/FeedCategoryDAO.java
@@ -13,7 +13,7 @@ import com.commafeed.backend.model.FeedCategory;
import com.commafeed.backend.model.QFeedCategory;
import com.commafeed.backend.model.QUser;
import com.commafeed.backend.model.User;
-import com.mysema.query.types.Predicate;
+import com.querydsl.core.types.Predicate;
@Singleton
public class FeedCategoryDAO extends GenericDAO {
@@ -26,11 +26,11 @@ public class FeedCategoryDAO extends GenericDAO {
}
public List findAll(User user) {
- return newQuery().from(category).where(category.user.eq(user)).join(category.user, QUser.user).fetch().list(category);
+ return query().selectFrom(category).where(category.user.eq(user)).join(category.user, QUser.user).fetchJoin().fetch();
}
public FeedCategory findById(User user, Long id) {
- return newQuery().from(category).where(category.user.eq(user), category.id.eq(id)).uniqueResult(category);
+ return query().selectFrom(category).where(category.user.eq(user), category.id.eq(id)).fetchOne();
}
public FeedCategory findByName(User user, String name, FeedCategory parent) {
@@ -40,7 +40,7 @@ public class FeedCategoryDAO extends GenericDAO {
} else {
parentPredicate = category.parent.eq(parent);
}
- return newQuery().from(category).where(category.user.eq(user), category.name.eq(name), parentPredicate).uniqueResult(category);
+ return query().selectFrom(category).where(category.user.eq(user), category.name.eq(name), parentPredicate).fetchOne();
}
public List findByParent(User user, FeedCategory parent) {
@@ -50,7 +50,7 @@ public class FeedCategoryDAO extends GenericDAO {
} else {
parentPredicate = category.parent.eq(parent);
}
- return newQuery().from(category).where(category.user.eq(user), parentPredicate).list(category);
+ return query().selectFrom(category).where(category.user.eq(user), parentPredicate).fetch();
}
public List findAllChildrenCategories(User user, FeedCategory parent) {
diff --git a/src/main/java/com/commafeed/backend/dao/FeedDAO.java b/src/main/java/com/commafeed/backend/dao/FeedDAO.java
index e522437c..67f86cb8 100644
--- a/src/main/java/com/commafeed/backend/dao/FeedDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/FeedDAO.java
@@ -15,8 +15,9 @@ import com.commafeed.backend.model.QFeed;
import com.commafeed.backend.model.QFeedSubscription;
import com.commafeed.backend.model.QUser;
import com.google.common.collect.Iterables;
-import com.mysema.query.jpa.hibernate.HibernateQuery;
-import com.mysema.query.jpa.hibernate.HibernateSubQuery;
+import com.querydsl.jpa.JPAExpressions;
+import com.querydsl.jpa.JPQLQuery;
+import com.querydsl.jpa.hibernate.HibernateQuery;
@Singleton
public class FeedDAO extends GenericDAO {
@@ -29,23 +30,23 @@ public class FeedDAO extends GenericDAO {
}
public List findNextUpdatable(int count, Date lastLoginThreshold) {
- HibernateQuery query = newQuery().from(feed);
+ HibernateQuery query = query().selectFrom(feed);
query.where(feed.disabledUntil.isNull().or(feed.disabledUntil.lt(new Date())));
if (lastLoginThreshold != null) {
QFeedSubscription subs = QFeedSubscription.feedSubscription;
QUser user = QUser.user;
- HibernateSubQuery subQuery = new HibernateSubQuery().from(subs);
+ JPQLQuery subQuery = JPAExpressions.selectOne().from(subs);
subQuery.join(subs.user, user).where(user.lastLogin.gt(lastLoginThreshold));
query.where(subQuery.exists());
}
- return query.orderBy(feed.disabledUntil.asc()).limit(count).distinct().list(feed);
+ return query.orderBy(feed.disabledUntil.asc()).limit(count).distinct().fetch();
}
public Feed findByUrl(String normalizedUrl) {
- List feeds = newQuery().from(feed).where(feed.normalizedUrlHash.eq(DigestUtils.sha1Hex(normalizedUrl))).list(feed);
+ List feeds = query().selectFrom(feed).where(feed.normalizedUrlHash.eq(DigestUtils.sha1Hex(normalizedUrl))).fetch();
Feed feed = Iterables.getFirst(feeds, null);
if (feed != null && StringUtils.equals(normalizedUrl, feed.getNormalizedUrl())) {
return feed;
@@ -54,12 +55,12 @@ public class FeedDAO extends GenericDAO {
}
public List findByTopic(String topic) {
- return newQuery().from(feed).where(feed.pushTopicHash.eq(DigestUtils.sha1Hex(topic))).list(feed);
+ return query().selectFrom(feed).where(feed.pushTopicHash.eq(DigestUtils.sha1Hex(topic))).fetch();
}
public List findWithoutSubscriptions(int max) {
QFeedSubscription sub = QFeedSubscription.feedSubscription;
- return newQuery().from(feed).where(new HibernateSubQuery().from(sub).where(sub.feed.eq(feed)).notExists()).limit(max).list(feed);
- // return newQuery().from(feed).leftJoin(feed.subscriptions, sub).where(sub.id.isNull()).limit(max).list(feed);
+ return query().selectFrom(feed).where(JPAExpressions.selectOne().from(sub).where(sub.feed.eq(feed)).notExists()).limit(max)
+ .fetch();
}
}
diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryContentDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryContentDAO.java
index 5056e7f5..68eeb41e 100644
--- a/src/main/java/com/commafeed/backend/dao/FeedEntryContentDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/FeedEntryContentDAO.java
@@ -10,13 +10,14 @@ import org.hibernate.SessionFactory;
import com.commafeed.backend.model.FeedEntryContent;
import com.commafeed.backend.model.QFeedEntry;
import com.commafeed.backend.model.QFeedEntryContent;
-import com.google.common.collect.Iterables;
-import com.mysema.query.jpa.hibernate.HibernateSubQuery;
+import com.querydsl.jpa.JPAExpressions;
+import com.querydsl.jpa.JPQLQuery;
@Singleton
public class FeedEntryContentDAO extends GenericDAO {
private QFeedEntryContent content = QFeedEntryContent.feedEntryContent;
+ private QFeedEntry entry = QFeedEntry.feedEntry;
@Inject
public FeedEntryContentDAO(SessionFactory sessionFactory) {
@@ -24,16 +25,14 @@ public class FeedEntryContentDAO extends GenericDAO {
}
public Long findExisting(String contentHash, String titleHash) {
- List list = newQuery().from(content).where(content.contentHash.eq(contentHash), content.titleHash.eq(titleHash)).limit(1)
- .list(content.id);
- return Iterables.getFirst(list, null);
+ return query().select(content.id).from(content).where(content.contentHash.eq(contentHash), content.titleHash.eq(titleHash))
+ .fetchFirst();
}
public int deleteWithoutEntries(int max) {
- QFeedEntry entry = QFeedEntry.feedEntry;
- HibernateSubQuery subQuery = new HibernateSubQuery().from(entry).where(entry.content.id.eq(content.id));
- List list = newQuery().from(content).where(subQuery.notExists()).limit(max).list(content);
+ JPQLQuery subQuery = JPAExpressions.selectOne().from(entry).where(entry.content.id.eq(content.id));
+ List list = query().selectFrom(content).where(subQuery.notExists()).limit(max).fetch();
int deleted = list.size();
delete(list);
diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java
index a5a13790..bbb3853f 100644
--- a/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java
@@ -6,18 +6,17 @@ import java.util.stream.Collectors;
import javax.inject.Inject;
import javax.inject.Singleton;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
import org.apache.commons.codec.digest.DigestUtils;
import org.hibernate.SessionFactory;
import com.commafeed.backend.model.Feed;
import com.commafeed.backend.model.FeedEntry;
import com.commafeed.backend.model.QFeedEntry;
-import com.google.common.collect.Iterables;
-import com.mysema.query.Tuple;
-import com.mysema.query.types.expr.NumberExpression;
+import com.querydsl.core.Tuple;
+import com.querydsl.core.types.dsl.NumberExpression;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
@Singleton
public class FeedEntryDAO extends GenericDAO {
@@ -30,24 +29,25 @@ public class FeedEntryDAO extends GenericDAO {
}
public Long findExisting(String guid, Feed feed) {
- List list = newQuery().from(entry).where(entry.guidHash.eq(DigestUtils.sha1Hex(guid)), entry.feed.eq(feed)).limit(1)
- .list(entry.id);
- return Iterables.getFirst(list, null);
+ return query().select(entry.id).from(entry).where(entry.guidHash.eq(DigestUtils.sha1Hex(guid)), entry.feed.eq(feed)).limit(1)
+ .fetchOne();
}
public List findFeedsExceedingCapacity(long maxCapacity, long max) {
NumberExpression count = entry.id.count();
- List tuples = newQuery().from(entry).groupBy(entry.feed).having(count.gt(maxCapacity)).limit(max).list(entry.feed.id, count);
+ List tuples = query().select(entry.feed.id, count).from(entry).groupBy(entry.feed).having(count.gt(maxCapacity)).limit(max)
+ .fetch();
return tuples.stream().map(t -> new FeedCapacity(t.get(entry.feed.id), t.get(count))).collect(Collectors.toList());
}
public int delete(Long feedId, long max) {
- List list = newQuery().from(entry).where(entry.feed.id.eq(feedId)).limit(max).list(entry);
+
+ List list = query().selectFrom(entry).where(entry.feed.id.eq(feedId)).limit(max).fetch();
return delete(list);
}
public int deleteOldEntries(Long feedId, long max) {
- List list = newQuery().from(entry).where(entry.feed.id.eq(feedId)).orderBy(entry.updated.asc()).limit(max).list(entry);
+ List list = query().selectFrom(entry).where(entry.feed.id.eq(feedId)).orderBy(entry.updated.asc()).limit(max).fetch();
return delete(list);
}
diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java
index 524012dd..7524b816 100644
--- a/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java
@@ -30,9 +30,9 @@ import com.commafeed.backend.model.UserSettings.ReadingOrder;
import com.commafeed.frontend.model.UnreadCount;
import com.google.common.collect.Iterables;
import com.google.common.collect.Ordering;
-import com.mysema.query.BooleanBuilder;
-import com.mysema.query.Tuple;
-import com.mysema.query.jpa.hibernate.HibernateQuery;
+import com.querydsl.core.BooleanBuilder;
+import com.querydsl.core.Tuple;
+import com.querydsl.jpa.hibernate.HibernateQuery;
@Singleton
public class FeedEntryStatusDAO extends GenericDAO {
@@ -68,7 +68,7 @@ public class FeedEntryStatusDAO extends GenericDAO {
private static final Comparator STATUS_COMPARATOR_ASC = Ordering.from(STATUS_COMPARATOR_DESC).reverse();
public FeedEntryStatus getStatus(User user, FeedSubscription sub, FeedEntry entry) {
- List statuses = newQuery().from(status).where(status.entry.eq(entry), status.subscription.eq(sub)).list(status);
+ List statuses = query().selectFrom(status).where(status.entry.eq(entry), status.subscription.eq(sub)).fetch();
FeedEntryStatus status = Iterables.getFirst(statuses, null);
return handleStatus(user, status, sub, entry);
}
@@ -93,7 +93,7 @@ public class FeedEntryStatusDAO extends GenericDAO {
}
public List findStarred(User user, Date newerThan, int offset, int limit, ReadingOrder order, boolean includeContent) {
- HibernateQuery query = newQuery().from(status).where(status.user.eq(user), status.starred.isTrue());
+ HibernateQuery query = query().selectFrom(status).where(status.user.eq(user), status.starred.isTrue());
if (newerThan != null) {
query.where(status.entryInserted.gt(newerThan));
}
@@ -110,7 +110,7 @@ public class FeedEntryStatusDAO extends GenericDAO {
query.setTimeout(timeout / 1000);
}
- List statuses = query.list(status);
+ List statuses = query.fetch();
for (FeedEntryStatus status : statuses) {
status = handleStatus(user, status, status.getSubscription(), status.getEntry());
fetchTags(user, status);
@@ -118,10 +118,10 @@ public class FeedEntryStatusDAO extends GenericDAO {
return lazyLoadContent(includeContent, statuses);
}
- private HibernateQuery buildQuery(User user, FeedSubscription sub, boolean unreadOnly, List keywords, Date newerThan,
- int offset, int limit, ReadingOrder order, Date last, String tag) {
+ private HibernateQuery buildQuery(User user, FeedSubscription sub, boolean unreadOnly, List keywords,
+ Date newerThan, int offset, int limit, ReadingOrder order, Date last, String tag) {
- HibernateQuery query = newQuery().from(entry).where(entry.feed.eq(sub.getFeed()));
+ HibernateQuery query = query().selectFrom(entry).where(entry.feed.eq(sub.getFeed()));
if (CollectionUtils.isNotEmpty(keywords)) {
query.join(entry.content, content);
@@ -197,8 +197,8 @@ public class FeedEntryStatusDAO extends GenericDAO {
FixedSizeSortedSet set = new FixedSizeSortedSet(capacity, comparator);
for (FeedSubscription sub : subs) {
Date last = (order != null && set.isFull()) ? set.last().getEntryUpdated() : null;
- HibernateQuery query = buildQuery(user, sub, unreadOnly, keywords, newerThan, -1, capacity, order, last, tag);
- List tuples = query.list(entry.id, entry.updated, status.id);
+ HibernateQuery query = buildQuery(user, sub, unreadOnly, keywords, newerThan, -1, capacity, order, last, tag);
+ List tuples = query.select(entry.id, entry.updated, status.id).fetch();
for (Tuple tuple : tuples) {
Long id = tuple.get(entry.id);
Date updated = tuple.get(entry.updated);
@@ -245,8 +245,8 @@ public class FeedEntryStatusDAO extends GenericDAO {
public UnreadCount getUnreadCount(User user, FeedSubscription subscription) {
UnreadCount uc = null;
- HibernateQuery query = buildQuery(user, subscription, true, null, null, -1, -1, null, null, null);
- List tuples = query.list(entry.count(), entry.updated.max());
+ HibernateQuery query = buildQuery(user, subscription, true, null, null, -1, -1, null, null, null);
+ List tuples = query.select(entry.count(), entry.updated.max()).fetch();
for (Tuple tuple : tuples) {
Long count = tuple.get(entry.count());
Date updated = tuple.get(entry.updated.max());
@@ -266,7 +266,7 @@ public class FeedEntryStatusDAO extends GenericDAO {
}
public List getOldStatuses(Date olderThan, int limit) {
- return newQuery().from(status).where(status.entryInserted.lt(olderThan), status.starred.isFalse()).limit(limit).list(status);
+ return query().selectFrom(status).where(status.entryInserted.lt(olderThan), status.starred.isFalse()).limit(limit).fetch();
}
}
diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryTagDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryTagDAO.java
index e2dc3ac9..f0ef9388 100644
--- a/src/main/java/com/commafeed/backend/dao/FeedEntryTagDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/FeedEntryTagDAO.java
@@ -23,10 +23,10 @@ public class FeedEntryTagDAO extends GenericDAO {
}
public List findByUser(User user) {
- return newQuery().from(tag).where(tag.user.eq(user)).distinct().list(tag.name);
+ return query().selectDistinct(tag.name).from(tag).where(tag.user.eq(user)).fetch();
}
public List findByEntry(User user, FeedEntry entry) {
- return newQuery().from(tag).where(tag.user.eq(user), tag.entry.eq(entry)).list(tag);
+ return query().selectFrom(tag).where(tag.user.eq(user), tag.entry.eq(entry)).fetch();
}
}
diff --git a/src/main/java/com/commafeed/backend/dao/FeedSubscriptionDAO.java b/src/main/java/com/commafeed/backend/dao/FeedSubscriptionDAO.java
index bcda4c1e..bfdc39e0 100644
--- a/src/main/java/com/commafeed/backend/dao/FeedSubscriptionDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/FeedSubscriptionDAO.java
@@ -16,7 +16,7 @@ import com.commafeed.backend.model.Models;
import com.commafeed.backend.model.QFeedSubscription;
import com.commafeed.backend.model.User;
import com.google.common.collect.Iterables;
-import com.mysema.query.jpa.hibernate.HibernateQuery;
+import com.querydsl.jpa.hibernate.HibernateQuery;
@Singleton
public class FeedSubscriptionDAO extends GenericDAO {
@@ -29,34 +29,34 @@ public class FeedSubscriptionDAO extends GenericDAO {
}
public FeedSubscription findById(User user, Long id) {
- List subs = newQuery().from(sub).where(sub.user.eq(user), sub.id.eq(id)).leftJoin(sub.feed).fetch()
- .leftJoin(sub.category).fetch().list(sub);
+ List subs = query().selectFrom(sub).where(sub.user.eq(user), sub.id.eq(id)).leftJoin(sub.feed).fetchJoin()
+ .leftJoin(sub.category).fetchJoin().fetch();
return initRelations(Iterables.getFirst(subs, null));
}
public List findByFeed(Feed feed) {
- return newQuery().from(sub).where(sub.feed.eq(feed)).list(sub);
+ return query().selectFrom(sub).where(sub.feed.eq(feed)).fetch();
}
public FeedSubscription findByFeed(User user, Feed feed) {
- List subs = newQuery().from(sub).where(sub.user.eq(user), sub.feed.eq(feed)).list(sub);
+ List subs = query().selectFrom(sub).where(sub.user.eq(user), sub.feed.eq(feed)).fetch();
return initRelations(Iterables.getFirst(subs, null));
}
public List findAll(User user) {
- List subs = newQuery().from(sub).where(sub.user.eq(user)).leftJoin(sub.feed).fetch().leftJoin(sub.category)
- .fetch().list(sub);
+ List subs = query().selectFrom(sub).where(sub.user.eq(user)).leftJoin(sub.feed).fetchJoin()
+ .leftJoin(sub.category).fetchJoin().fetch();
return initRelations(subs);
}
public List findByCategory(User user, FeedCategory category) {
- HibernateQuery query = newQuery().from(sub).where(sub.user.eq(user));
+ HibernateQuery query = query().selectFrom(sub).where(sub.user.eq(user));
if (category == null) {
query.where(sub.category.isNull());
} else {
query.where(sub.category.eq(category));
}
- return initRelations(query.list(sub));
+ return initRelations(query.fetch());
}
public List findByCategories(User user, List categories) {
diff --git a/src/main/java/com/commafeed/backend/dao/GenericDAO.java b/src/main/java/com/commafeed/backend/dao/GenericDAO.java
index db2a61ae..3a6884ad 100644
--- a/src/main/java/com/commafeed/backend/dao/GenericDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/GenericDAO.java
@@ -1,22 +1,25 @@
package com.commafeed.backend.dao;
-import io.dropwizard.hibernate.AbstractDAO;
-
import java.util.Collection;
import org.hibernate.SessionFactory;
import com.commafeed.backend.model.AbstractModel;
-import com.mysema.query.jpa.hibernate.HibernateQuery;
+import com.querydsl.jpa.hibernate.HibernateQueryFactory;
+
+import io.dropwizard.hibernate.AbstractDAO;
public abstract class GenericDAO extends AbstractDAO {
+ private HibernateQueryFactory factory;
+
protected GenericDAO(SessionFactory sessionFactory) {
super(sessionFactory);
+ this.factory = new HibernateQueryFactory(() -> currentSession());
}
- protected HibernateQuery newQuery() {
- return new HibernateQuery(currentSession());
+ protected HibernateQueryFactory query() {
+ return factory;
}
public void saveOrUpdate(T model) {
diff --git a/src/main/java/com/commafeed/backend/dao/UserDAO.java b/src/main/java/com/commafeed/backend/dao/UserDAO.java
index 3bc94cb2..8b51e95c 100644
--- a/src/main/java/com/commafeed/backend/dao/UserDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/UserDAO.java
@@ -19,18 +19,18 @@ public class UserDAO extends GenericDAO {
}
public User findByName(String name) {
- return newQuery().from(user).where(user.name.equalsIgnoreCase(name)).uniqueResult(user);
+ return query().selectFrom(user).where(user.name.equalsIgnoreCase(name)).fetchOne();
}
public User findByApiKey(String key) {
- return newQuery().from(user).where(user.apiKey.equalsIgnoreCase(key)).uniqueResult(user);
+ return query().selectFrom(user).where(user.apiKey.equalsIgnoreCase(key)).fetchOne();
}
public User findByEmail(String email) {
- return newQuery().from(user).where(user.email.equalsIgnoreCase(email)).uniqueResult(user);
+ return query().selectFrom(user).where(user.email.equalsIgnoreCase(email)).fetchOne();
}
public long count() {
- return newQuery().from(user).count();
+ return query().selectFrom(user).fetchCount();
}
}
diff --git a/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java b/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java
index 3c149499..303d454e 100644
--- a/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java
@@ -25,11 +25,11 @@ public class UserRoleDAO extends GenericDAO {
}
public List findAll() {
- return newQuery().from(role).leftJoin(role.user).fetch().distinct().list(role);
+ return query().selectFrom(role).leftJoin(role.user).fetchJoin().distinct().fetch();
}
public List findAll(User user) {
- return newQuery().from(role).where(role.user.eq(user)).distinct().list(role);
+ return query().selectFrom(role).where(role.user.eq(user)).distinct().fetch();
}
public Set findRoles(User user) {
diff --git a/src/main/java/com/commafeed/backend/dao/UserSettingsDAO.java b/src/main/java/com/commafeed/backend/dao/UserSettingsDAO.java
index 92e8afd5..0553ef84 100644
--- a/src/main/java/com/commafeed/backend/dao/UserSettingsDAO.java
+++ b/src/main/java/com/commafeed/backend/dao/UserSettingsDAO.java
@@ -20,6 +20,6 @@ public class UserSettingsDAO extends GenericDAO {
}
public UserSettings findByUser(User user) {
- return newQuery().from(settings).where(settings.user.eq(user)).uniqueResult(settings);
+ return query().selectFrom(settings).where(settings.user.eq(user)).fetchFirst();
}
}