package hu.sch.ejb; import hu.sch.domain.Membership; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.TypedQuery; public class GroupMembershipFetcher { private final EntityManager em; private final Long groupId; public GroupMembershipFetcher(EntityManager em, Long groupId) { this.em = em; this.groupId = groupId; } public List<Membership> findActive() { return buildQuery(true).getResultList(); } public List<Membership> findInactive() { return buildQuery(false).getResultList(); } private TypedQuery<Membership> buildQuery(boolean isActive) { TypedQuery<Membership> q = em.createQuery(buildQueryString(isActive), Membership.class); q.setParameter("groupId", groupId); return q; } private String buildQueryString(boolean isActive) { StringBuilder builder = new StringBuilder("SELECT ms FROM Membership ms ") .append("LEFT JOIN FETCH ms.posts post ") .append("LEFT JOIN FETCH post.postType ") .append("JOIN FETCH ms.user ") .append("WHERE ms.groupId = :groupId ") .append("AND ms.end "); if (isActive) { builder.append("IS NULL "); } else { builder.append("IS NOT NULL "); } builder.append("ORDER BY ms.user.lastName, ms.user.firstName"); return builder.toString(); } }