Example usage for org.hibernate.criterion Projections distinct

List of usage examples for org.hibernate.criterion Projections distinct

Introduction

In this page you can find the example usage for org.hibernate.criterion Projections distinct.

Prototype

public static Projection distinct(Projection projection) 

Source Link

Document

Create a distinct projection from a projection.

Usage

From source file:org.jasig.ssp.dao.PersonDao.java

License:Apache License

public PagingWrapper<Person> getAllAssignedCoaches(SortingAndPaging sAndP) {

    DetachedCriteria coach_ids = DetachedCriteria.forClass(Person.class, "coach_ids");
    final ProjectionList projections = Projections.projectionList();
    projections.add(Projections.distinct(Projections.property("coach.id")));
    coach_ids.setProjection(projections);
    coach_ids.add(Restrictions.isNotNull("coach"));

    Criteria criteria = createCriteria().add(Subqueries.propertiesIn(new String[] { "id" }, coach_ids));

    if (sAndP != null && sAndP.isFilteredByStatus()) {
        sAndP.addStatusFilterToCriteria(criteria);
    }/*from   w w w  . j  a  v a  2  s  .c o m*/

    // item count
    Long totalRows = 0L;
    if ((sAndP != null) && sAndP.isPaged()) {
        totalRows = (Long) criteria.setProjection(Projections.rowCount()).uniqueResult();
    }

    criteria.setProjection(null);

    if (sAndP == null || !(sAndP.isSorted())) {
        criteria.addOrder(Order.asc("lastName")).addOrder(Order.asc("firstName"));
    } else {
        if (sAndP.isSorted()) {
            sAndP.addSortingToCriteria(criteria);
        }
        sAndP.addPagingToCriteria(criteria);
    }

    return new PagingWrapper<Person>(totalRows, criteria.list());

}

From source file:org.jasig.ssp.dao.PersonDao.java

License:Apache License

public PagingWrapper<CoachPersonLiteTO> getAllAssignedCoachesLite(SortingAndPaging sAndP,
        String homeDepartment) {//from w w w .j  av a  2  s .  co  m

    DetachedCriteria coach_ids = DetachedCriteria.forClass(Person.class, "coach_ids");
    final ProjectionList projections = Projections.projectionList();
    projections.add(Projections.distinct(Projections.property("coach.id")));
    coach_ids.setProjection(projections);
    coach_ids.add(Restrictions.isNotNull("coach"));

    Criteria criteria = createCriteria().add(Subqueries.propertiesIn(new String[] { "id" }, coach_ids));

    if (sAndP != null && sAndP.isFilteredByStatus()) {
        sAndP.addStatusFilterToCriteria(criteria);
    }

    if (homeDepartment != null && homeDepartment.length() >= 0) {
        criteria.createAlias("staffDetails", "personStaffDetails");
        criteria.add(Restrictions.eq("personStaffDetails.departmentName", homeDepartment));
    } else {
        criteria.createAlias("staffDetails", "personStaffDetails", JoinType.LEFT_OUTER_JOIN);
    }

    // item count
    Long totalRows = 0L;
    if ((sAndP != null) && sAndP.isPaged()) {
        totalRows = (Long) criteria.setProjection(Projections.rowCount()).uniqueResult();
    }

    criteria.setProjection(null);
    criteria.setProjection(Projections.projectionList().add(Projections.property("id").as("person_id"))
            .add(Projections.property("firstName").as("person_firstName"))
            .add(Projections.property("lastName").as("person_lastName"))
            .add(Projections.property("primaryEmailAddress").as("person_primaryEmailAddress"))
            .add(Projections.property("workPhone").as("person_workPhone"))
            .add(Projections.property("personStaffDetails.departmentName").as("person_departmentName")))
            .setResultTransformer(
                    new NamespacedAliasToBeanResultTransformer(CoachPersonLiteTO.class, "person_"));

    return new PagingWrapper<CoachPersonLiteTO>(totalRows, criteria.list());

}

From source file:org.jasig.ssp.dao.PersonDao.java

License:Apache License

@SuppressWarnings("unchecked")
public List<UUID> getStudentUUIDs(PersonSearchFormTO form) {
    Criteria criteria = setBasicSearchCriteria(createCriteria(), form);
    criteria.setProjection(Projections.distinct(Projections.property("id")));

    return (List<UUID>) criteria.list();
}

From source file:org.jasig.ssp.dao.PersonStaffDetailsDao.java

License:Apache License

@SuppressWarnings("unchecked")
public List<String> getAllHomeDepartments(ObjectStatus status) {
    Criteria criteria = createCriteria();
    if (status != null)
        criteria.add(Restrictions.eq("objectStatus", status));
    criteria.add(Restrictions.isNotNull("departmentName"));
    criteria.setProjection(/*from  www.  j  av  a  2  s  .  co m*/
            Projections.projectionList().add(Projections.distinct(Projections.property("departmentName"))));
    return ((List<String>) criteria.list());
}

From source file:org.jboss.example.portlet.jasper.db.PhoneCallHibernateServiceImpl.java

License:Open Source License

@Override
public List<String> getUniquePhoneNo() {
    Session s = getHibernateSession();//w ww .  jav  a  2  s  .  c o m
    Transaction t = s.beginTransaction();

    try {
        // s.createQuery(" phoneNumber from @PhoneCallBean");
        @SuppressWarnings("unchecked")
        List<String> phoneNumbers = (List<String>) s.createCriteria(PhoneCallBean.class)
                .setProjection(Projections.distinct(Projections.property("phoneNumber"))).list();

        t.commit();

        return phoneNumbers;

    } catch (Exception e) {
        log.error(e.getMessage());
        e.printStackTrace();
        t.rollback();
    }

    return null;
}

From source file:org.jspresso.framework.application.backend.action.persistence.hibernate.QueryEntitiesAction.java

License:Open Source License

/**
 * Performs actual Query. This method can be overridden by subclasses in order
 * to deal with non-Hibernate searches./*w  w  w.  jav  a  2s.  c  om*/
 *
 * @param queryComponent
 *     the query component.
 * @param context
 *     the action context
 * @return the list of retrieved components.
 */
@Override
@SuppressWarnings({ "unchecked", "ConstantConditions" })
public List<?> performQuery(final IQueryComponent queryComponent, final Map<String, Object> context) {
    Session hibernateSession = ((HibernateBackendController) getController(context)).getHibernateSession();
    ICriteriaFactory critFactory = (ICriteriaFactory) queryComponent.get(CRITERIA_FACTORY);
    if (critFactory == null) {
        critFactory = getCriteriaFactory(context);
        queryComponent.put(CRITERIA_FACTORY, critFactory);
    }
    EnhancedDetachedCriteria criteria = critFactory.createCriteria(queryComponent, context);
    List<IEntity> entities;
    if (criteria == null) {
        entities = new ArrayList<>();
        queryComponent.setRecordCount(0);
    } else {
        ICriteriaRefiner critRefiner = (ICriteriaRefiner) queryComponent.get(CRITERIA_REFINER);
        if (critRefiner == null) {
            critRefiner = getCriteriaRefiner(context);
            if (critRefiner != null) {
                queryComponent.put(CRITERIA_REFINER, critRefiner);
            }
        }
        if (critRefiner != null) {
            critRefiner.refineCriteria(criteria, queryComponent, context);
        }
        Integer totalCount = null;
        Integer pageSize = queryComponent.getPageSize();
        Integer page = queryComponent.getPage();

        ResultTransformer refinerResultTransformer = criteria.getResultTransformer();
        List<Order> refinerOrders = criteria.getOrders();
        if (refinerOrders != null) {
            criteria.removeAllOrders();
        }

        if (queryComponent.isDistinctEnforced() || queryComponent.getQueryDescriptor().isTranslatable()) {
            criteria.setProjection(Projections.distinct(Projections.id()));
            EnhancedDetachedCriteria outerCriteria = EnhancedDetachedCriteria
                    .forEntityName(queryComponent.getQueryContract().getName());
            outerCriteria.add(Subqueries.propertyIn(IEntity.ID, criteria));
            criteria = outerCriteria;
        }

        if (pageSize != null) {
            if (page == null) {
                page = 0;
                queryComponent.setPage(page);
            }
            if (queryComponent.getRecordCount() == null) {
                if (isUseCountForPagination()) {
                    criteria.setProjection(Projections.rowCount());
                    totalCount = ((Number) criteria.getExecutableCriteria(hibernateSession).list().get(0))
                            .intValue();
                } else {
                    totalCount = IQueryComponent.UNKNOWN_COUNT;
                }
            }
            if (refinerOrders != null) {
                for (Order order : refinerOrders) {
                    criteria.addOrder(order);
                }
            }
            critFactory.completeCriteriaWithOrdering(criteria, queryComponent, context);
            if (refinerResultTransformer != null) {
                criteria.setResultTransformer(refinerResultTransformer);
            }
            if (useInListForPagination) {
                criteria.setProjection(Projections.id());
                List<Serializable> entityIds = criteria.getExecutableCriteria(hibernateSession)
                        .setFirstResult(page * pageSize).setMaxResults(pageSize).list();
                if (entityIds.isEmpty()) {
                    entities = new ArrayList<>();
                } else {
                    criteria = EnhancedDetachedCriteria
                            .forEntityName(queryComponent.getQueryContract().getName());
                    entities = criteria.add(createEntityIdsInCriterion(entityIds, 500))
                            .getExecutableCriteria(hibernateSession).list();
                    Map<Serializable, IEntity> entitiesById = new HashMap<>();
                    for (IEntity entity : entities) {
                        entitiesById.put(entity.getId(), entity);
                    }
                    entities = new ArrayList<>();
                    for (Serializable id : entityIds) {
                        IEntity entity = entitiesById.get(id);
                        if (entity != null) {
                            entities.add(entity);
                        }
                    }
                }
            } else {
                entities = criteria.getExecutableCriteria(hibernateSession).setFirstResult(page * pageSize)
                        .setMaxResults(pageSize).list();
            }
        } else {
            if (refinerOrders != null) {
                for (Order order : refinerOrders) {
                    criteria.addOrder(order);
                }
            }
            critFactory.completeCriteriaWithOrdering(criteria, queryComponent, context);
            if (refinerResultTransformer != null) {
                criteria.setResultTransformer(refinerResultTransformer);
            }
            entities = criteria.getExecutableCriteria(hibernateSession).list();
            totalCount = entities.size();
        }
        if (totalCount != null) {
            queryComponent.setRecordCount(totalCount);
        }
    }
    List<String> prefetchProperties = queryComponent.getPrefetchProperties();
    if (prefetchProperties != null && entities != null) {
        // Will load the prefetch properties in the same transaction in order to leverage
        // Hibernate batch fetching.
        IAccessorFactory accessorFactory = getAccessorFactory(context);
        for (String prefetchProperty : prefetchProperties) {
            for (IEntity entity : entities) {
                try {
                    accessorFactory.createPropertyAccessor(prefetchProperty, queryComponent.getQueryContract())
                            .getValue(entity);
                } catch (Exception e) {
                    LOG.warn("An unexpected exception occurred when pre-fetching property {}", prefetchProperty,
                            e);
                }
            }
        }
    }
    return entities;
}

From source file:org.LexGrid.LexBIG.caCore.dao.orm.translators.GridCQLToDetachedCriteria.java

License:Open Source License

private DetachedCriteria handleQueryOptions(DetachedCriteria criteria, QueryModifier modifiers) {
    if (modifiers == null) {
        return criteria;
    }//from w  ww. j av a  2  s . c o m

    ProjectionList projectionList = Projections.projectionList();

    String[] projectionProperties = modifiers.getAttributeNames();

    if (projectionProperties != null) {
        for (String prop : projectionProperties) {
            projectionList.add(Projections.property(prop));
        }
    }

    String distinctAttribute = modifiers.getDistinctAttribute();
    if (distinctAttribute != null) {
        projectionList.add(Projections.distinct(Projections.property(distinctAttribute)));
    }

    boolean isCount = modifiers.isCountOnly();
    if (isCount) {
        projectionList.add(Projections.rowCount());
    }

    //Only add the Projection List if it was populated with something.
    if (projectionList.getLength() > 0) {
        criteria.setProjection(projectionList);
    }
    return criteria;
}

From source file:org.linagora.linshare.core.repository.hibernate.AccountQuotaRepositoryImpl.java

License:Open Source License

@Override
public List<String> findDomainUuidByBatchModificationDate(Date startDate) {
    DetachedCriteria criteria = DetachedCriteria.forClass(getPersistentClass());
    criteria.add(Restrictions.ge("batchModificationDate", startDate));
    criteria.add(Restrictions.le("batchModificationDate", new Date()));
    criteria.createAlias("domain", "do");
    criteria.setProjection(Projections.distinct(Projections.property("do.uuid")));
    @SuppressWarnings("unchecked")
    List<String> listIdentifier = (List<String>) getHibernateTemplate().findByCriteria(criteria);
    return listIdentifier;
}

From source file:org.linagora.linshare.core.repository.hibernate.OperationHistoryRepositoryImpl.java

License:Open Source License

@Override
public List<AbstractDomain> findDomainBeforeDate(Date creationDate) {
    DetachedCriteria criteria = DetachedCriteria.forClass(getPersistentClass());
    criteria.add(Restrictions.lt("creationDate", creationDate));
    criteria.setProjection(Projections.distinct(Projections.property("domain")));
    @SuppressWarnings("unchecked")
    List<AbstractDomain> result = (List<AbstractDomain>) getHibernateTemplate().findByCriteria(criteria);
    return result;
}

From source file:org.linagora.linshare.core.repository.hibernate.OperationHistoryRepositoryImpl.java

License:Open Source License

@Override
public List<String> findUuidAccountBeforeDate(Date date, ContainerQuotaType containerQuotaType) {
    DetachedCriteria criteria = DetachedCriteria.forClass(getPersistentClass());
    criteria.add(Restrictions.eq("containerQuotaType", containerQuotaType));
    criteria.add(Restrictions.le("creationDate", date));
    criteria.createAlias("account", "ac");
    criteria.setProjection(Projections.distinct(Projections.property("ac.lsUuid")));
    @SuppressWarnings("unchecked")
    List<String> listlsUuid = (List<String>) getHibernateTemplate().findByCriteria(criteria);
    return listlsUuid;
}