private Criteria createArticlesForMagazineCriteria(Magazine magazine, PagingAndSortCriteria criteria, User editor, Boolean hasApprovalTimeLimit, Rating... rating) { Session session = getSession(); Junction junction = Restrictions.conjunction() .add(Restrictions.eq("magazine.id", magazine.getId())); if (null != editor) { junction = junction.add(Restrictions.eq("editor.id", editor.getId())); } if (null != rating && rating.length > 0) { if (rating.length == 1) { junction = junction.add(Restrictions.eq("authorApproval", rating[0])); } else { Junction dj = Restrictions.disjunction(); for (Rating r: rating) { dj.add(Restrictions.eq("authorApproval", r)); } junction.add(dj); } } if (null != hasApprovalTimeLimit) { if (hasApprovalTimeLimit) { junction = junction.add(Restrictions.isNotNull("approvalTimeLimit")); } else { junction = junction.add(Restrictions.isNull("approvalTimeLimit")); } } Criteria search = session.createCriteria(EditedArticleBean.class).add(junction); if (null == criteria) { return; } if (criteria.isSortReversed()) { for (String sortBy: criteria.getSortFieldList()) { search.addOrder(Order.desc(sortBy)); } } else { for (String sortBy: criteria.getSortFieldList()) { search.addOrder(Order.asc(sortBy)); } } return search.list() }