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:it.unitn.elisco.dao.CourseDAO.java

public List<String> findCourseNames(String name) {
    Session s = HibernateUtil.getSession();
    Transaction tx = s.beginTransaction();

    // Fetch courses:
    // - which name begins with the specified query (optional, otherwise return all courses)

    Criteria criteria = s.createCriteria(Course.class);
    if (name != null && !name.equals("")) {
        criteria.add(Restrictions.like("name", name, MatchMode.START));
    }//from   www.  j  a  v a2s.  com

    // Then return results as Strings, returning distinct names
    criteria.setProjection(Projections.distinct(Projections.property("name")));

    List<String> res = criteria.list();

    tx.commit();
    s.close();

    return res;
}

From source file:it.unitn.elisco.dao.CourseDAO.java

public List<String> findCourseNamesByAdmin(Administrator admin, String name) {
    Session s = HibernateUtil.getSession();
    Transaction tx = s.beginTransaction();

    // Fetch courses:
    // - which are administrated by specified admin
    // - which name begins with the specified query (optional, otherwise return all courses)

    Criteria criteria = s.createCriteria(Course.class);
    criteria.createCriteria("admins").add(Restrictions.eq("email", admin.getEmail()));
    if (name != null && !name.equals("")) {
        criteria.add(Restrictions.like("name", name, MatchMode.START));
    }//from w ww  . j a v  a 2  s  .  c o  m

    // Then return results as Strings, returning distinct names
    criteria.setProjection(Projections.distinct(Projections.property("name")));

    List<String> res = criteria.list();

    tx.commit();
    s.close();

    return res;
}

From source file:ke.co.mspace.nonsmppmanager.service.SMSOutServiceImpl.java

@Override
public List<String> getUsernames() {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.getTransaction().begin();//  w ww . ja v  a2  s  . c o m

    Criteria criteria = session.createCriteria(SMSOut.class);
    criteria.setProjection(Projections.distinct(Projections.property("user")));
    List<String> result = criteria.list();
    session.getTransaction().commit();
    return result;
}

From source file:kltn.dao.ATMLocationDAO.java

public List<String> listBank() {
    Session session = HibernateUtil.getSessionFactory().openSession();
    List<String> list = null;
    Transaction tx = null;// w  w  w. ja  va 2s .c o m
    try {

        tx = session.beginTransaction();
        Criteria cr = session.createCriteria(AtmLocation.class);
        cr.setProjection(Projections.distinct(Projections.property("bank")));
        list = cr.list();
        tx.commit();
    } catch (HibernateException he) {
        if (tx != null && tx.isActive()) {
            tx.rollback();
        }
    } finally {
        session.close();
    }
    return list;
}

From source file:kr.debop4j.data.hibernate.repository.impl.HibernateDao.java

License:Apache License

/**
 * Build projection criteria./*  w w w.  jav  a  2  s. c  om*/
 *
 * @param projectClass   the project class
 * @param criteria       the criteria
 * @param projection     the projection
 * @param distinctResult the distinct result
 * @return the criteria
 */
protected <TProject> Criteria buildProjectionCriteria(Class<TProject> projectClass, Criteria criteria,
        Projection projection, boolean distinctResult) {
    if (isTraceEnabled)
        log.trace(
                "Criteria? Projection? ?. projectClass=[{}], projection=[{}], distinctResult=[{}]",
                projectClass, projection, distinctResult);

    if (distinctResult) {
        criteria.setProjection(Projections.distinct(projection));
    } else {
        criteria.setProjection(projection);
    }

    criteria.setResultTransformer(Transformers.aliasToBean(projectClass));
    return criteria;
}

From source file:kr.debop4j.data.hibernate.tools.EntityTool.java

License:Apache License

/**
 * Get ancestors id criteria.//from   ww w  .j  a  v  a2s.  c om
 *
 * @param entity      the entity
 * @param session     the session
 * @param entityClass the entity class
 * @return the detached criteria
 */
public static <T extends IHierarchyEntity<T> & IEntity<TId>, TId extends Serializable> DetachedCriteria getAncestorsIdCriteria(
        T entity, Session session, Class<T> entityClass) {
    return getAncestorsCriteria(entity, session, entityClass)
            .setProjection(Projections.distinct(Projections.id()));
}

From source file:kr.debop4j.data.hibernate.tools.EntityTool.java

License:Apache License

/**
 * Get descendents id criteria./*from   ww  w.j  a v a2  s . co m*/
 *
 * @param entity      the entity
 * @param session     the session
 * @param entityClass the entity class
 * @return the detached criteria
 */
public static <T extends IHierarchyEntity<T> & IEntity<TId>, TId extends Serializable> DetachedCriteria getDescendentsIdCriteria(
        T entity, Session session, Class<T> entityClass) {
    return getDescendentsCriteria(entity, session, entityClass)
            .setProjection(Projections.distinct(Projections.id()));
}

From source file:model.DAO.java

public List DistinctQuery(Object obj, String columnName) {
    Criteria crit = session.createCriteria(obj.getClass());
    crit.setProjection(Projections.distinct(Projections.property(columnName)));
    return crit.list();
}

From source file:net.firejack.platform.api.registry.broker.ReadBaseBIReportDataBroker.java

License:Apache License

@Override
protected ServiceResponse<BIReportData> perform(ServiceRequest<NamedValues> request) throws Exception {
    Long biReportUserId = (Long) request.getData().get("id");

    String parentNodeValues = (String) request.getData().get("parentNodeValues");
    String[] parentRowValues = WebUtils.deserializeJSON(parentNodeValues, String[].class);

    int depth = parentRowValues.length;

    ServiceResponse<BIReportData> response;

    ServiceResponse<BIReportUser> biReportUserResponse = OPFEngine.RegistryService
            .readBIReportUser(biReportUserId);
    if (biReportUserResponse.isSuccess()) {
        BIReportData biReport = new BIReportData();

        BIReportUser biReportUser = biReportUserResponse.getItem();
        List<BIReportUserField> biReportUserFields = biReportUser.getFields();

        Map<Long, BIReportField> entityBIReportFieldMap = new HashMap<Long, BIReportField>();
        for (BIReportField biReportField : biReportUser.getReport().getFields()) {
            if (biReportField.getField() == null) {
                entityBIReportFieldMap.put(biReportField.getEntity().getId(), biReportField);
            }//from w  w  w  .ja  v  a  2  s. c o m
        }

        Integer columnIndex = 0;
        List<BIReportColumn> biReportColumns = new ArrayList<BIReportColumn>();

        Map<BIReportField, BIReportLocation> groupedBIReportFields = new LinkedHashMap<BIReportField, BIReportLocation>();

        Map<Integer, BIReportRow> verticalColumnsMapping = new HashMap<Integer, BIReportRow>();
        List<BIReportUserField> verticalBIReportUserFields = getFieldsByLocation(biReportUserFields,
                BIReportLocation.VERTICAL);
        Entity previousEntity = null;
        for (int i = 0; i < verticalBIReportUserFields.size(); i++) {
            BIReportUserField biReportUserField = verticalBIReportUserFields.get(i);
            BIReportField biReportField = biReportUserField.getField();
            Entity entity = biReportField.getEntity();

            if (previousEntity == null || !previousEntity.getId().equals(entity.getId())) {
                String columnName = entity.getName();
                BIReportField entityBIReportField = entityBIReportFieldMap.get(entity.getId());
                if (entityBIReportField != null) {
                    columnName = StringUtils.defaultIfEmpty(entityBIReportField.getDisplayName(), columnName);
                }

                BIReportColumn biReportColumn = new BIReportColumn();
                biReportColumn.setName(columnName);
                biReportColumn.setType(BIReportLocation.VERTICAL);
                biReportColumn.setColumnIndex(columnIndex);
                biReportColumn.setExpanded(biReportUserField.isExpanded());
                biReportColumn.setUnShift(i);
                biReportColumns.add(biReportColumn);

                columnIndex++;
                previousEntity = entity;
            }

            BIReportRow biReportRow = new BIReportRow();
            biReportRow.setColumnIndex(biReportColumns.size() - 1);
            biReportRow.setExpanded(biReportUserField.isExpanded());
            verticalColumnsMapping.put(i, biReportRow);
            groupedBIReportFields.put(biReportField, BIReportLocation.VERTICAL);
        }
        biReport.setCountOfLevels(verticalColumnsMapping.size());

        List<BIReportUserField> horizontalBIReportUserFields = getFieldsByLocation(biReportUserFields,
                BIReportLocation.HORIZONTAL);
        Map<Entity, List<BIReportField>> entityBIReportFields = new LinkedHashMap<Entity, List<BIReportField>>();
        for (BIReportUserField biReportUserField : horizontalBIReportUserFields) {
            BIReportField biReportField = biReportUserField.getField();
            Entity entity = biReportField.getEntity();

            List<BIReportField> biReportFields = entityBIReportFields.get(entity);
            if (biReportFields == null) {
                biReportFields = new ArrayList<BIReportField>();
                entityBIReportFields.put(entity, biReportFields);
            }
            biReportFields.add(biReportField);
            groupedBIReportFields.put(biReportField, BIReportLocation.HORIZONTAL);
        }

        List<BIReportUserField> measureBIReportUserFields = getFieldsByLocation(biReportUserFields,
                BIReportLocation.MEASURE);
        for (BIReportUserField biReportUserField : measureBIReportUserFields) {
            BIReportField biReportField = biReportUserField.getField();
            groupedBIReportFields.put(biReportField, BIReportLocation.MEASURE);
        }

        String biReportUserFilter = biReportUser.getFilter();
        biReport.setFilter(biReportUserFilter);
        List<List<SearchQuery>> filterSearchQueries = WebUtils.deserializeJSON(biReportUserFilter, List.class,
                List.class, SearchQuery.class);

        BIReportUserField measureBIReportUserField = measureBIReportUserFields.get(0);
        BIReportField measureBIReportField = measureBIReportUserField.getField();
        Entity factEntity = measureBIReportField.getEntity();
        String factDomainClassName = FormattingUtils.classFormatting(factEntity.getName());
        String factModelClassName = factEntity.getPath() + ".model." + factDomainClassName + "Model";

        Class<?> factModelClass = Class.forName(factModelClassName);

        List<Object[]> globalList = null;
        for (Map.Entry<Entity, List<BIReportField>> entry : entityBIReportFields.entrySet()) {
            Entity entity = entry.getKey();
            List<BIReportField> biReportFields = entry.getValue();

            String domainClassName = FormattingUtils.classFormatting(entity.getName());
            String modelClassName = entity.getPath() + ".model." + domainClassName + "Model";
            String storeClassName = entity.getPath() + ".store.Basic" + domainClassName + "Store";
            IAbstractStore store = OpenFlameSpringContext.getBean(storeClassName);

            List<List<SearchQuery>> columnSearchQueryList = new ArrayList<List<SearchQuery>>();
            List<SortField> sortFields = new ArrayList<SortField>();
            ProjectionList projectionList = Projections.projectionList();
            for (BIReportField biReportField : biReportFields) {
                Field field = biReportField.getField();
                String fieldName = FormattingUtils.fieldModelFormatting(field.getName());
                projectionList.add(Projections.property(fieldName));
                sortFields.add(new SortField(fieldName, SortOrder.ASC));

                String fkDimFieldName = findDimFieldName(factModelClass, modelClassName);
                for (List<SearchQuery> searchQueries : filterSearchQueries) {
                    List<SearchQuery> columnSearchQueries = new ArrayList<SearchQuery>();
                    for (SearchQuery searchQuery : searchQueries) {
                        String searchField = searchQuery.getField();
                        String[] fieldNames = searchField.split("\\.");
                        if (fieldNames.length == 2 && fieldNames[0].equals(fkDimFieldName)) {
                            SearchQuery columnSearchQuery = new SearchQuery(fieldNames[1],
                                    searchQuery.getOperation(), searchQuery.getValue());
                            columnSearchQueries.add(columnSearchQuery);
                        }
                    }
                    if (columnSearchQueries.isEmpty()) {
                        SearchQuery alwaysTrueSearchQuery = new SearchQuery();
                        columnSearchQueries.add(alwaysTrueSearchQuery);
                    }
                    columnSearchQueryList.add(columnSearchQueries);
                }
            }

            Paging paging = new Paging(null, null, sortFields);
            List<Object[]> objectsList;
            if (biReportFields.size() > 1) {
                objectsList = store.advancedSearchWithProjection(columnSearchQueryList,
                        Projections.distinct(projectionList), null, paging);
            } else {
                objectsList = new ArrayList<Object[]>();
                List<Object> objectList = store.advancedSearchWithProjection(columnSearchQueryList,
                        Projections.distinct(projectionList), null, paging);
                for (Object object : objectList) {
                    objectsList.add(new Object[] { object });
                }
            }
            if (globalList == null) {
                globalList = objectsList;
            } else {
                List<Object[]> mergedList = new ArrayList<Object[]>();
                for (Object[] globalObjects : globalList) {
                    for (Object[] objects : objectsList) {
                        Object[] mergedObjects = ArrayUtils.addAll(globalObjects, objects);
                        mergedList.add(mergedObjects);
                    }
                }
                globalList = mergedList;
            }

        }

        List<BIReportField> measureBIReportFields = getFieldsByLocation(groupedBIReportFields,
                BIReportLocation.MEASURE);
        Map<ArrayKey, Integer> horizontalColumnMapping = generateHorizontalColumns(globalList, biReportColumns,
                measureBIReportFields, columnIndex);
        if (depth == 0) {
            biReport.setColumns(biReportColumns);
        }

        int countOfExpandedChildren = 1;
        int countOfVerticalColumns = verticalColumnsMapping.size();
        for (int i = depth; i < countOfVerticalColumns; i++) {
            BIReportRow verticalBIReportRow = verticalColumnsMapping.get(i);
            if (verticalBIReportRow.isExpanded()) {
                countOfExpandedChildren++;
            } else {
                break;
            }
        }

        ProjectionList projectionList = Projections.projectionList();
        List<SortField> sortFields = new ArrayList<SortField>();
        Map<String, String> aliases = new HashMap<String, String>();

        int positionOfLastExpandedColumns = depth + countOfExpandedChildren - 1;
        List<SearchQuery> childrenFilterSearchQueries = new ArrayList<SearchQuery>();
        List<BIReportField> verticalBIReportFields = getFieldsByLocation(groupedBIReportFields,
                new BIReportLocation[] { BIReportLocation.VERTICAL });
        for (int i = 0; i < verticalBIReportFields.size(); i++) {
            BIReportField biReportField = verticalBIReportFields.get(i);
            Entity dimEntity = biReportField.getEntity();
            String dimDomainClassName = FormattingUtils.classFormatting(dimEntity.getName());
            String dimModelClassName = dimEntity.getPath() + ".model." + dimDomainClassName + "Model";

            String fkDimFieldName = findDimFieldName(factModelClass, dimModelClassName);
            aliases.put(fkDimFieldName, fkDimFieldName);

            Field field = biReportField.getField();
            String fieldName = FormattingUtils.fieldModelFormatting(field.getName());
            String aliasedFieldName = fkDimFieldName + "." + fieldName;
            projectionList.add(Projections.groupProperty(aliasedFieldName));

            sortFields.add(new SortField(aliasedFieldName, SortOrder.ASC));

            if (positionOfLastExpandedColumns >= i + 1) {
                if (depth >= i + 1) {
                    SearchQuery searchQuery = new SearchQuery();
                    searchQuery.setField(aliasedFieldName);
                    searchQuery.setOperation(QueryOperation.EQUALS);
                    searchQuery.setValue(parentRowValues[i]);
                    childrenFilterSearchQueries.add(searchQuery);
                }
            } else {
                break;
            }
        }

        if (filterSearchQueries.isEmpty()) {
            filterSearchQueries.add(childrenFilterSearchQueries);
        } else {
            for (List<SearchQuery> searchQueries : filterSearchQueries) {
                for (SearchQuery childrenFilterSearchQuery : childrenFilterSearchQueries) {
                    searchQueries.add(childrenFilterSearchQuery);
                }
            }
        }

        List<BIReportField> horizontalBIReportFields = getFieldsByLocation(groupedBIReportFields,
                new BIReportLocation[] { BIReportLocation.HORIZONTAL });
        for (BIReportField biReportField : horizontalBIReportFields) {
            Entity dimEntity = biReportField.getEntity();
            String dimDomainClassName = FormattingUtils.classFormatting(dimEntity.getName());
            String dimModelClassName = dimEntity.getPath() + ".model." + dimDomainClassName + "Model";

            String fkDimFieldName = findDimFieldName(factModelClass, dimModelClassName);
            aliases.put(fkDimFieldName, fkDimFieldName);

            Field field = biReportField.getField();
            String fieldName = FormattingUtils.fieldModelFormatting(field.getName());
            String aliasedFieldName = fkDimFieldName + "." + fieldName;
            projectionList.add(Projections.groupProperty(aliasedFieldName));

            sortFields.add(new SortField(aliasedFieldName, SortOrder.ASC));
        }

        for (BIReportField biReportField : measureBIReportFields) {
            Field field = biReportField.getField();
            String fieldName = FormattingUtils.fieldModelFormatting(field.getName());
            projectionList.add(Projections.count(fieldName));
        }

        String storeClassName = factEntity.getPath() + ".store.Basic" + factDomainClassName + "Store";
        IAbstractStore store = OpenFlameSpringContext.getBean(storeClassName);

        List<Object[]> dataList = store.advancedSearchWithProjection(filterSearchQueries,
                Projections.distinct(projectionList), aliases, new Paging(null, null, sortFields));

        int countOfHorizontalColumns = horizontalBIReportUserFields.size();
        int countOfMeasureColumns = measureBIReportUserFields.size();

        List<BIReportRow> biReportRows = generateRows(dataList, verticalColumnsMapping, horizontalColumnMapping,
                countOfVerticalColumns, countOfHorizontalColumns, countOfMeasureColumns, depth,
                countOfExpandedChildren);
        biReport.setRows(biReportRows);

        response = new ServiceResponse<BIReportData>(biReport, "BI Report data", true);
    } else {
        response = new ServiceResponse<BIReportData>(
                "Could not find user configuration of BIReport by ID: " + biReportUserId, false);
    }

    return response;
}

From source file:net.longfalcon.newsj.persistence.hibernate.PartDAOImpl.java

License:Open Source License

/**
 * findDistinctMessageIdSizeAndPartNumberByBinaryId
 * @param binaryId/*  w ww. j  a va2  s . co m*/
 * @return list of {String,Long,Integer}
 */
@Override
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
public List<Object[]> findDistinctMessageIdSizeAndPartNumberByBinaryId(long binaryId) {
    Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Part.class);
    criteria.add(Restrictions.eq("binaryId", binaryId));
    criteria.setProjection(
            Projections.projectionList().add(Projections.distinct(Projections.property("messageId")))
                    .add(Projections.property("size")).add(Projections.property("partNumber")));
    criteria.addOrder(Order.desc("partNumber"));

    return criteria.list();
}