forked from Archives/Athou_commafeed
use distinct for joins and fetches over one to many relationships
This commit is contained in:
@@ -25,6 +25,8 @@ public class FeedEntryDAO extends GenericDAO<FeedEntry> {
|
|||||||
|
|
||||||
CriteriaQuery<FeedEntry> query = builder.createQuery(getType());
|
CriteriaQuery<FeedEntry> query = builder.createQuery(getType());
|
||||||
Root<FeedEntry> root = query.from(getType());
|
Root<FeedEntry> root = query.from(getType());
|
||||||
|
|
||||||
|
query.distinct(true);
|
||||||
query.where(builder.equal(root.get(FeedEntry_.guidHash), hash));
|
query.where(builder.equal(root.get(FeedEntry_.guidHash), hash));
|
||||||
root.fetch(FeedEntry_.feeds, JoinType.LEFT);
|
root.fetch(FeedEntry_.feeds, JoinType.LEFT);
|
||||||
TypedQuery<FeedEntry> q = em.createQuery(query);
|
TypedQuery<FeedEntry> q = em.createQuery(query);
|
||||||
@@ -39,6 +41,8 @@ public class FeedEntryDAO extends GenericDAO<FeedEntry> {
|
|||||||
|
|
||||||
CriteriaQuery<FeedEntry> query = builder.createQuery(getType());
|
CriteriaQuery<FeedEntry> query = builder.createQuery(getType());
|
||||||
Root<FeedEntry> root = query.from(getType());
|
Root<FeedEntry> root = query.from(getType());
|
||||||
|
|
||||||
|
query.distinct(true);
|
||||||
query.where(root.get(FeedEntry_.guidHash).in(hashes));
|
query.where(root.get(FeedEntry_.guidHash).in(hashes));
|
||||||
root.fetch(FeedEntry_.feeds, JoinType.LEFT);
|
root.fetch(FeedEntry_.feeds, JoinType.LEFT);
|
||||||
TypedQuery<FeedEntry> q = em.createQuery(query);
|
TypedQuery<FeedEntry> q = em.createQuery(query);
|
||||||
@@ -49,6 +53,8 @@ public class FeedEntryDAO extends GenericDAO<FeedEntry> {
|
|||||||
CriteriaQuery<FeedEntry> query = builder.createQuery(getType());
|
CriteriaQuery<FeedEntry> query = builder.createQuery(getType());
|
||||||
Root<FeedEntry> root = query.from(getType());
|
Root<FeedEntry> root = query.from(getType());
|
||||||
SetJoin<FeedEntry, Feed> feedsJoin = root.join(FeedEntry_.feeds);
|
SetJoin<FeedEntry, Feed> feedsJoin = root.join(FeedEntry_.feeds);
|
||||||
|
|
||||||
|
query.distinct(true);
|
||||||
query.where(builder.equal(feedsJoin.get(Feed_.id), feed.getId()));
|
query.where(builder.equal(feedsJoin.get(Feed_.id), feed.getId()));
|
||||||
query.orderBy(builder.desc(root.get(FeedEntry_.updated)));
|
query.orderBy(builder.desc(root.get(FeedEntry_.updated)));
|
||||||
TypedQuery<FeedEntry> q = em.createQuery(query);
|
TypedQuery<FeedEntry> q = em.createQuery(query);
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ public class UserRoleDAO extends GenericDAO<UserRole> {
|
|||||||
public List<UserRole> findAll() {
|
public List<UserRole> findAll() {
|
||||||
EasyCriteria<UserRole> criteria = EasyCriteriaFactory
|
EasyCriteria<UserRole> criteria = EasyCriteriaFactory
|
||||||
.createQueryCriteria(em, getType());
|
.createQueryCriteria(em, getType());
|
||||||
|
criteria.setDistinctTrue();
|
||||||
criteria.leftJoinFetch(UserRole_.user.getName());
|
criteria.leftJoinFetch(UserRole_.user.getName());
|
||||||
return criteria.getResultList();
|
return criteria.getResultList();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user