From f7b10cb6c676d9982b77e0a0e7ce4b7b0646f8c2 Mon Sep 17 00:00:00 2001 From: Athou Date: Wed, 5 Jun 2013 13:42:00 +0200 Subject: [PATCH] use distinct for joins and fetches over one to many relationships --- src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java | 6 ++++++ src/main/java/com/commafeed/backend/dao/UserRoleDAO.java | 1 + 2 files changed, 7 insertions(+) diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java index cf7e6b28..2b5586d0 100644 --- a/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java +++ b/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java @@ -25,6 +25,8 @@ public class FeedEntryDAO extends GenericDAO { CriteriaQuery query = builder.createQuery(getType()); Root root = query.from(getType()); + + query.distinct(true); query.where(builder.equal(root.get(FeedEntry_.guidHash), hash)); root.fetch(FeedEntry_.feeds, JoinType.LEFT); TypedQuery q = em.createQuery(query); @@ -39,6 +41,8 @@ public class FeedEntryDAO extends GenericDAO { CriteriaQuery query = builder.createQuery(getType()); Root root = query.from(getType()); + + query.distinct(true); query.where(root.get(FeedEntry_.guidHash).in(hashes)); root.fetch(FeedEntry_.feeds, JoinType.LEFT); TypedQuery q = em.createQuery(query); @@ -49,6 +53,8 @@ public class FeedEntryDAO extends GenericDAO { CriteriaQuery query = builder.createQuery(getType()); Root root = query.from(getType()); SetJoin feedsJoin = root.join(FeedEntry_.feeds); + + query.distinct(true); query.where(builder.equal(feedsJoin.get(Feed_.id), feed.getId())); query.orderBy(builder.desc(root.get(FeedEntry_.updated))); TypedQuery q = em.createQuery(query); diff --git a/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java b/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java index 8092675c..38639372 100644 --- a/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java +++ b/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java @@ -20,6 +20,7 @@ public class UserRoleDAO extends GenericDAO { public List findAll() { EasyCriteria criteria = EasyCriteriaFactory .createQueryCriteria(em, getType()); + criteria.setDistinctTrue(); criteria.leftJoinFetch(UserRole_.user.getName()); return criteria.getResultList(); }