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:com.hypersocket.repository.AbstractRepositoryImpl.java

License:Open Source License

@SuppressWarnings("unchecked")
@Transactional(readOnly = true)//ww w .j ava2 s  .co m
public <T> List<T> search(Class<T> clz, final String searchColumn, final String searchPattern, final int start,
        final int length, final ColumnSort[] sorting, CriteriaConfiguration... configs) {
    Criteria criteria = createCriteria(clz);
    if (!StringUtils.isEmpty(searchPattern)) {
        criteria.add(Restrictions.ilike(searchColumn, searchPattern));
    }

    for (CriteriaConfiguration c : configs) {
        c.configure(criteria);
    }

    for (ColumnSort sort : sorting) {
        criteria.addOrder(sort.getSort() == Sort.ASC ? Order.asc(sort.getColumn().getColumnName())
                : Order.desc(sort.getColumn().getColumnName()));
    }

    criteria.setProjection(Projections.distinct(Projections.id()));

    criteria.setFirstResult(start);
    criteria.setMaxResults(length);

    List<T> ids = (List<T>) criteria.list();

    if (ids.isEmpty()) {
        return new ArrayList<T>();
    }

    criteria = createCriteria(clz);

    criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
    criteria.add(Restrictions.in("id", ids));

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

From source file:com.hypersocket.resource.AbstractAssignableResourceRepositoryImpl.java

License:Open Source License

@SuppressWarnings("unchecked")
@Override//from w  w w  . j  a  v  a  2  s . c o  m
public Collection<T> searchAssignedResources(List<Principal> principals, final String searchPattern,
        final int start, final int length, final ColumnSort[] sorting, CriteriaConfiguration... configs) {

    Criteria criteria = createCriteria(getResourceClass());
    criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

    if (StringUtils.isNotBlank(searchPattern)) {
        criteria.add(Restrictions.ilike("name", searchPattern));
    }

    for (CriteriaConfiguration c : configs) {
        c.configure(criteria);
    }

    criteria.add(Restrictions.eq("realm", principals.get(0).getRealm()));
    criteria = criteria.createCriteria("roles");
    criteria.add(Restrictions.eq("allUsers", true));

    Set<T> everyone = new HashSet<T>(criteria.list());

    criteria = createCriteria(getResourceClass());

    ProjectionList projList = Projections.projectionList();
    projList.add(Projections.property("id"));
    projList.add(Projections.property("name"));

    criteria.setProjection(Projections.distinct(projList));
    criteria.setFirstResult(start);
    criteria.setMaxResults(length);

    if (StringUtils.isNotBlank(searchPattern)) {
        criteria.add(Restrictions.ilike("name", searchPattern));
    }

    for (CriteriaConfiguration c : configs) {
        c.configure(criteria);
    }

    for (ColumnSort sort : sorting) {
        criteria.addOrder(sort.getSort() == Sort.ASC ? Order.asc(sort.getColumn().getColumnName())
                : Order.desc(sort.getColumn().getColumnName()));
    }

    criteria.add(Restrictions.eq("realm", principals.get(0).getRealm()));

    criteria = criteria.createCriteria("roles");
    criteria.add(Restrictions.eq("allUsers", false));
    criteria = criteria.createCriteria("principals");

    List<Long> ids = new ArrayList<Long>();
    for (Principal p : principals) {
        ids.add(p.getId());
    }
    criteria.add(Restrictions.in("id", ids));

    List<Object[]> results = (List<Object[]>) criteria.list();

    if (results.size() > 0) {
        Long[] entityIds = new Long[results.size()];
        int idx = 0;
        for (Object[] obj : results) {
            entityIds[idx++] = (Long) obj[0];
        }

        criteria = createCriteria(getResourceClass());
        criteria.add(Restrictions.in("id", entityIds));

        everyone.addAll((List<T>) criteria.list());
    }
    return everyone;
}

From source file:com.hypersocket.resource.AbstractAssignableResourceRepositoryImpl.java

License:Open Source License

@SuppressWarnings("unchecked")
@Override//from   w  w w .j a  v a2  s.c om
public Collection<Principal> getAssignedPrincipals(Realm realm, CriteriaConfiguration... configs) {

    Criteria criteria = createCriteria(getResourceClass());

    for (CriteriaConfiguration c : configs) {
        c.configure(criteria);
    }

    criteria.add(Restrictions.eq("realm", realm));
    criteria = criteria.createCriteria("roles");
    criteria.add(Restrictions.eq("allUsers", false));

    criteria = criteria.createCriteria("principals");
    criteria.setProjection(Projections.distinct(Projections.property("id")));
    criteria.setResultTransformer(CriteriaSpecification.PROJECTION);

    List<?> uniquePrincipals = criteria.list();

    if (uniquePrincipals.isEmpty()) {
        return new HashSet<Principal>();
    }
    criteria = createCriteria(Principal.class);
    criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
    criteria.add(Restrictions.in("id", uniquePrincipals));
    List<?> res = criteria.list();

    return (Collection<Principal>) res;
}

From source file:com.hypersocket.resource.AbstractAssignableResourceRepositoryImpl.java

License:Open Source License

@Override
public Long getAssignedPrincipalCount(Realm realm, CriteriaConfiguration... configs) {

    Criteria criteria = createCriteria(getResourceClass());

    for (CriteriaConfiguration c : configs) {
        c.configure(criteria);/*from   ww  w.  j a v  a 2 s.  c  o  m*/
    }

    criteria.add(Restrictions.eq("realm", realm));
    criteria = criteria.createCriteria("roles");
    criteria.add(Restrictions.eq("allUsers", false));

    criteria = criteria.createCriteria("principals");
    criteria.setProjection(Projections.distinct(Projections.property("id")));
    criteria.setResultTransformer(CriteriaSpecification.PROJECTION);

    List<?> uniquePrincipals = criteria.list();

    return (long) uniquePrincipals.size();

}

From source file:com.ihsolution.hqipo.dao.utils.QueryHelper.java

License:Open Source License

/**
 * convert the InputDTO to QueryHelper to get the count (omitting sort order)
 */// w w  w. j a v  a  2 s  .  c om
@SuppressWarnings("deprecation")
public QueryHelper convertDtoToQhelperForCount(InputDTO dto) {
    if (dto == null)
        return this;
    this.dto = dto;
    int ind = 0;
    try {
        Junction j = null;
        Junction conj = Restrictions.conjunction();
        Junction disj = Restrictions.disjunction();
        String operator = "";
        boolean disjB = false, conjB = false;
        if (dto.getFetchMode() != null) {
            for (Map.Entry<String, String> entry : dto.getFetchMode().entrySet()) {
                FetchMode fmode = null;
                logger.debug("FetchMode key=" + entry.getKey() + " val=" + entry.getValue());
                if (entry.getValue().equals("join"))
                    fmode = FetchMode.JOIN;
                else if (entry.getValue().equals("eager"))
                    fmode = FetchMode.EAGER;
                else if (entry.getValue().equals("lazy"))
                    fmode = FetchMode.LAZY;
                else
                    fmode = FetchMode.LAZY;
                this.detCriteria.setFetchMode(entry.getKey(), fmode);
            }
        }
        for (String field : dto.getFields()) {
            operator = dto.getOperators().get(ind);
            if ("or".equals(operator)) {
                j = disj;
                disjB = true;
            } else {
                j = conj;
                conjB = true;
            }
            this.addFieldAndVal(createAliases(field), dto.getValues().get(ind), dto.getOperations().get(ind),
                    j);
            ind++;
        }

        if (dto.getExpressions() != null) {
            for (String expr : dto.getExpressions()) {
                j.add(Expression.sql(expr));
            }
        }
        if (dto.getFieldsToSelect() != null && dto.getFieldsToSelect().length > 0) {
            ProjectionList prList = Projections.projectionList();
            Projection projection = null;

            for (String fld : dto.getFieldsToSelect()) {
                String als = this.createAliases(fld);
                prList.add(Projections.property(als));
            }
            if (dto.isDistinct()) {
                projection = Projections.distinct(prList);
            } else {
                projection = prList;
            }
            this.detCriteria.setProjection(projection);

        } else {
            this.fldSelectedSet = false;
        }

        if (disjB)
            detCriteria.add(disj);
        if (conjB)
            detCriteria.add(conj);
        if (logger.isDebugEnabled()) {
            if (conjB)
                logger.debug("conjuction=" + conj.toString());
            if (disjB)
                logger.debug("disjunction=" + disj.toString());
        }
        if (dto.isDistinct())
            detCriteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
    } catch (Exception e) {
        e.printStackTrace();
        logger.error(e);
    }
    return this;
}

From source file:com.indicator_engine.dao.GLAEntityDaoImpl.java

License:Open Source License

/**
 * Loads all GLA Entity Objects present in the Database based on a specific Category ID.
 * @param categoryID Category ID used for selecting relevant GLA Entity Objects.
 * @return Returns all GLA Entity Objects present in Database and matching the specified Category ID.
 **//*from  w  w w . java  2 s .c o  m*/
@Override
@Transactional(readOnly = true)
public List<String> loadEntitiesByCategoryID(Long categoryID) {
    Session session = factory.getCurrentSession();
    Criteria criteria = session.createCriteria(GLAEntity.class);
    criteria.setProjection(Projections.distinct(Projections.property("key")));
    criteria.createAlias("glaEvent", "events");
    criteria.setFetchMode("events", FetchMode.JOIN);
    criteria.createAlias("events.glaCategory", "category");
    criteria.setFetchMode("category", FetchMode.JOIN);
    criteria.add(Restrictions.eq("category.id", categoryID));
    return criteria.list();

}

From source file:com.inkubator.hrm.dao.impl.WtPeriodeDaoImpl.java

@Override
public List<WtPeriode> getAllYears() {
    Criteria criteria = getCurrentSession().createCriteria(getEntityClass());
    criteria.setProjection(Projections.distinct(Projections.property("tahun")));
    //        criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
    return criteria.list();
}

From source file:com.jaspersoft.jasperserver.api.metadata.common.service.impl.hibernate.HibernateRepositoryServiceImpl.java

License:Open Source License

@Transactional(propagation = Propagation.REQUIRED)
public List<Long> getResourcesIds(ExecutionContext context, String text, Class type, Class aClass,
        List<SearchFilter> filters, Map<String, SearchFilter> typeSpecificFilters, SearchSorter sorter,
        TransformerFactory transformerFactory, int firstResult, int maxResult) {
    if (transformerFactory == null) {
        throw new IllegalArgumentException("Transformer factory is null.");
    }/*from   w  w  w  . ja  va 2s.  com*/

    SearchCriteria criteria = getResourcesListCriteria(context, text, type, aClass, filters,
            typeSpecificFilters);

    ProjectionList distinctProperties = Projections.projectionList().add(Projections.id());
    criteria.addProjection(Projections.distinct(distinctProperties));

    if (sorter != null) {
        sorter.applyOrder(type.getName(), context, criteria);
    }

    List list = getHibernateTemplate().findByCriteria(criteria, firstResult, maxResult);

    List<Long> ids = new ArrayList<Long>();
    ResultTransformer transformer = transformerFactory.createTransformer(filters, sorter);
    if (transformer != null) {
        ids.addAll(transformer.transformToIdList(list));
    } else {
        throw new IllegalArgumentException("Result transformer is null.");
    }

    return ids;
}

From source file:com.jaspersoft.jasperserver.api.metadata.common.service.impl.hibernate.HibernateRepositoryServiceImpl.java

License:Open Source License

@Transactional(propagation = Propagation.REQUIRED)
public List<ResourceLookup> getResources(ExecutionContext context, SearchCriteriaFactory searchCriteriaFactory,
        List<SearchFilter> filters, SearchSorter sorter, TransformerFactory transformerFactory, int current,
        int max) {
    if (transformerFactory == null) {
        throw new IllegalArgumentException("Transformer factory is null.");
    }//from w w w . ja  v a 2  s . co m

    SearchCriteria criteria;
    List<ResourceLookup> result;
    if (queryModificationEvaluator.useFullResource(context)) {
        // we have to get ids only and make additional call, see:
        // https://community.jboss.org/wiki/HibernateFAQ-AdvancedProblems#Hibernate_does_not_return_distinct_results_for_a_query_with_outer_join_fetching_enabled_for_a_collection_even_if_I_use_the_distinct_keyword
        searchCriteriaFactory = searchCriteriaFactory.newFactory(Resource.class.getName());
        criteria = searchCriteriaFactory.create(context, filters);
        criteria.addProjection(Projections.distinct(Projections.id()));
        searchCriteriaFactory.applySorter(context, criteria, sorter);

        List list = getHibernateTemplate().findByCriteria(criteria, current, max);

        List<Long> ids = new ArrayList<Long>();
        ResultTransformer transformer = transformerFactory.createTransformer(filters, sorter);
        if (transformer != null) {
            ids.addAll(transformer.transformToIdList(list));
        } else {
            throw new IllegalArgumentException("Result transformer is null.");
        }

        result = getResourcesByIdList(ids, searchCriteriaFactory);
    } else {
        // just get the resources since no outer joins supposed to be here
        criteria = searchCriteriaFactory.create(context, filters);
        searchCriteriaFactory.applySorter(context, criteria, sorter);

        List<IdedRepoObject> list = getHibernateTemplate().findByCriteria(criteria, current, max);
        result = toLookups(list, true);
    }

    return result;
}

From source file:com.kodemore.hibernate.criteria.KmCriteria.java

License:Open Source License

public void selectDistinct(String name) {
    Projection e;
    e = Projections.property(getFullName(name));
    e = Projections.distinct(e);
    addProjection(e);
}