use distinct for joins and fetches over one to many relationships

This commit is contained in:
Athou
2013-06-05 13:42:00 +02:00
parent e9bd8f81ee
commit f7b10cb6c6
2 changed files with 7 additions and 0 deletions

View File

@@ -25,6 +25,8 @@ public class FeedEntryDAO extends GenericDAO<FeedEntry> {
CriteriaQuery<FeedEntry> query = builder.createQuery(getType());
Root<FeedEntry> root = query.from(getType());
query.distinct(true);
query.where(builder.equal(root.get(FeedEntry_.guidHash), hash));
root.fetch(FeedEntry_.feeds, JoinType.LEFT);
TypedQuery<FeedEntry> q = em.createQuery(query);
@@ -39,6 +41,8 @@ public class FeedEntryDAO extends GenericDAO<FeedEntry> {
CriteriaQuery<FeedEntry> query = builder.createQuery(getType());
Root<FeedEntry> root = query.from(getType());
query.distinct(true);
query.where(root.get(FeedEntry_.guidHash).in(hashes));
root.fetch(FeedEntry_.feeds, JoinType.LEFT);
TypedQuery<FeedEntry> q = em.createQuery(query);
@@ -49,6 +53,8 @@ public class FeedEntryDAO extends GenericDAO<FeedEntry> {
CriteriaQuery<FeedEntry> query = builder.createQuery(getType());
Root<FeedEntry> root = query.from(getType());
SetJoin<FeedEntry, Feed> 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<FeedEntry> q = em.createQuery(query);

View File

@@ -20,6 +20,7 @@ public class UserRoleDAO extends GenericDAO<UserRole> {
public List<UserRole> findAll() {
EasyCriteria<UserRole> criteria = EasyCriteriaFactory
.createQueryCriteria(em, getType());
criteria.setDistinctTrue();
criteria.leftJoinFetch(UserRole_.user.getName());
return criteria.getResultList();
}