Example usage for org.hibernate.criterion DetachedCriteria setProjection

List of usage examples for org.hibernate.criterion DetachedCriteria setProjection

Introduction

In this page you can find the example usage for org.hibernate.criterion DetachedCriteria setProjection.

Prototype

public DetachedCriteria setProjection(Projection projection) 

Source Link

Document

Set the projection to use.

Usage

From source file:org.opensingular.flow.persistence.service.AbstractHibernatePersistenceService.java

License:Apache License

public List<PROCESS_INSTANCE> retrieveProcessInstancesWith(PROCESS_DEF process, SUser creatingUser,
        Boolean active) {//from  www.  j  a v  a2s.  c  o m
    Objects.requireNonNull(process);
    Criteria c = getSession().createCriteria(getClassProcessInstance(), "PI");
    c.createAlias("PI.processVersion", "DEF");
    c.add(Restrictions.eq("DEF.processDefinition", process));

    if (active != null) {
        DetachedCriteria sub = DetachedCriteria.forClass(getClassTaskInstance(), "T");
        sub.createAlias("T.task", "TA");
        sub.add(Restrictions.eqProperty("T.processInstance.cod", "PI.cod"));
        sub.add(Restrictions.isNull("T.endDate"));
        if (active) {
            sub.add(Restrictions.ne("TA.type", TaskType.END));
        } else {
            sub.add(Restrictions.eq("TA.type", TaskType.END));
        }
        sub.setProjection(Projections.id());

        c.add(Subqueries.exists(sub));
    }

    if (creatingUser != null) {
        c.add(Restrictions.eq("PI.userCreator", creatingUser));
    }
    c.setCacheable(true).setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
    return c.list();
}

From source file:org.sakaiproject.genericdao.hibernate.HibernateBasicGenericDao.java

License:Apache License

/**
 * MUST override this/* ww w . j ava  2 s. c  o m*/
 */
@SuppressWarnings("unchecked")
protected <T> long baseCountBySearch(Class<T> type, Search search) {
    DetachedCriteria criteria = buildCriteria(type, search);
    criteria.setProjection(Projections.rowCount());
    List<Number> l = (List<Number>) getHibernateTemplate().findByCriteria(criteria);
    return l.get(0).longValue();
}

From source file:org.shredzone.cilla.service.search.strategy.AbstractSearchStrategy.java

License:Open Source License

/**
 * Creates a {@link Criteria} object for the filter given in the
 * {@link SearchResultImpl}./*from  w w w  .  j av a2 s  . co m*/
 */
protected Criteria createCriteria(SearchResultImpl result) throws CillaServiceException {
    Criteria crit = pageDao.criteria();
    crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

    crit.add(Restrictions.and(Restrictions.isNotNull("publication"),
            Restrictions.le("publication", result.getNow())));

    crit.add(
            Restrictions.or(Restrictions.isNull("expiration"), Restrictions.gt("expiration", result.getNow())));

    crit.add(Restrictions.eq("hidden", false));

    FilterModel filter = result.getFilter();
    if (filter != null) {
        if (filter.getCategory() != null) {
            // I'd prefer to use Restrictions.in instead, but this seems to be difficult.
            // http://stackoverflow.com/questions/407737/hibernate-criteria-querying-tables-in-nm-relationship
            Disjunction dis = Restrictions.disjunction();
            result.getEffectiveCategories().stream().mapToLong(Category::getId)
                    .forEach(id -> dis.add(Restrictions.idEq(id)));
            crit.createCriteria("categories").add(dis);
        }

        if (filter.getTag() != null) {
            long tagId = filter.getTag().getId();
            Disjunction dis = Restrictions.disjunction();

            // All pages with the requested tag
            crit.createAlias("tags", "tt");
            dis.add(Restrictions.eq("tt.id", tagId));

            // All pages with pictures in a gallery section having the requested tag
            DetachedCriteria subcrit = DetachedCriteria.forClass(GallerySection.class);
            subcrit.createCriteria("pictures").createCriteria("tags").add(Restrictions.idEq(tagId));
            subcrit.setProjection(Projections.distinct(Projections.property("page.id")));
            dis.add(Subqueries.propertyIn("id", subcrit));

            crit.add(dis);
        }

        if (filter.getCreator() != null) {
            crit.add(Restrictions.eq("creator", filter.getCreator()));
        }

        if (filter.getPage() != null) {
            crit.add(Restrictions.idEq(filter.getPage().getId()));
        }

        if (filter.getDate() != null) {
            DateRange dr = filter.getDate();
            PageOrder order = (filter.getOrder() != null ? filter.getOrder() : PageOrder.PUBLICATION);
            crit.add(Restrictions.between(order.getColumn(), dr.getFromDate().getTime(),
                    dr.getThruDate().getTime()));
        }

        if (filter.getQuery() != null) {
            // No challenge protected pages for context search, because protected
            // contents may be revealed in the search results.
            crit.add(Restrictions.isNull("challenge"));
        }
    }

    return crit;
}

From source file:org.sigmah.server.dao.hibernate.FilterCriterionBridge.java

License:Open Source License

public static void addAdminRestriction(Conjunction criterion, Filter filter) {
    if (filter.isRestricted(DimensionType.AdminLevel)) {
        DetachedCriteria locations = DetachedCriteria.forClass(Location.class);
        locations.createAlias("adminEntities", "entity");
        locations.add(Restrictions.in("entity.id", filter.getRestrictions(DimensionType.AdminLevel)));
        locations.setProjection(Projections.property("id"));

        criterion.add(Subqueries.propertyIn("location.id", locations));
    }/*  ww  w .j  a va  2  s  .c  om*/
}

From source file:org.sipfoundry.sipxconfig.common.SipxHibernateDaoSupport.java

License:Contributor Agreement License

/**
 * Return the count of beans of type beanClass in the specified group. If groupId is null,
 * then don't filter by group, just count all the beans.
 *///from w  w  w  .j a v a 2s.c  o  m
public int getBeansInGroupCount(Class beanClass, Integer groupId) {
    DetachedCriteria crit = DetachedCriteria.forClass(beanClass);
    addByGroupCriteria(crit, groupId);
    crit.setProjection(Projections.rowCount());
    List results = getHibernateTemplate().findByCriteria(crit);
    return (Integer) DataAccessUtils.requiredSingleResult(results);
}

From source file:org.sipfoundry.sipxconfig.phone.PhoneContextImpl.java

License:Contributor Agreement License

public int getPhonesWithNoLinesCount() {
    DetachedCriteria crit = DetachedCriteria.forClass(Phone.class);
    addByNoLinesCriteria(crit);//from  w w  w. j  a va  2  s  .  c  o m
    crit.setProjection(Projections.rowCount());
    List results = getHibernateTemplate().findByCriteria(crit);
    return (Integer) DataAccessUtils.requiredSingleResult(results);
}

From source file:org.socraticgrid.hl7.services.orders.dao.GenericDaoImpl.java

License:Apache License

@Override
public Long count(DetachedCriteria criteria) {
    criteria.setProjection(Projections.rowCount());
    return DataAccessUtils.longResult(ht.findByCriteria(criteria));
}

From source file:org.tonguetied.keywordmanagement.KeywordRepositoryImpl.java

License:Apache License

public PaginatedList<Keyword> findKeywords(Keyword keyword, final boolean ignoreCase, final Order order,
        final Integer firstResult, final Integer maxResults) throws IllegalArgumentException {
    if (keyword == null) {
        throw new IllegalArgumentException("keyword cannot be null");
    }/*w ww  .  j  a  v a2s.c o  m*/
    final MatchMode matchMode = MatchMode.ANYWHERE;
    Example criterionKeyword = Example.create(keyword);
    criterionKeyword.enableLike(matchMode);
    if (ignoreCase) {
        criterionKeyword.ignoreCase();
    }

    // Normally, Hibernate performs a left-outer join, when searching for 
    // an object with collections using Criteria. This returns a ResultSet
    // that contains duplicate objects. In order to get a unique list of 
    // Keywords with paginated support, we need to a nested query to find
    // distinct matching ids, then get the Keywords. The end result is a
    // subselect in the main query, but only one query is sent.
    DetachedCriteria dc = DetachedCriteria.forClass(Keyword.class);
    dc.add(criterionKeyword);
    dc.setResultTransformer(DISTINCT_ROOT_ENTITY);

    Conjunction conjunction = createTranslationConditions(keyword.getTranslations(), ignoreCase, matchMode);
    if (conjunction != null)
        dc.createCriteria(FIELD_TRANSLATIONS).add(conjunction);
    dc.setProjection(Projections.id());

    Criteria criteria = getSession().createCriteria(Keyword.class);
    criteria.add(Subqueries.propertyIn(FIELD_ID, dc));
    if (Order.desc == order)
        criteria.addOrder(desc(FIELD_KEYWORD));
    else
        criteria.addOrder(asc(FIELD_KEYWORD));
    if (firstResult != null)
        criteria.setFirstResult(firstResult);
    if (maxResults != null)
        criteria.setMaxResults(maxResults);

    final List<Keyword> criteriaList = criteria.list();
    int maxListSize = 0;
    if (criteriaList.size() > 0) {
        maxListSize = calculateMaxListSize(criterionKeyword, conjunction);
    }

    return new PaginatedList<Keyword>(criteriaList, maxListSize);
}

From source file:org.web4thejob.orm.DataReaderServiceImpl.java

License:Open Source License

private org.hibernate.criterion.Criterion toHibernateSubcriterion(String masterId, String subqueryAlias,
        Subquery subquery) {// w  w  w.j  a  v a 2s  . c o m
    String alias = "subq_" + subqueryAlias;

    DetachedCriteria detachedCriteria = DetachedCriteria.forClass(subquery.getTarget().getEntityType(), alias);
    for (Criterion criterion : subquery.getCriteria()) {
        if (Subquery.MASTER_ID_PLACEHOLDER == criterion.getValue()) {
            String subProperty = alias + "." + criterion.getPropertyPath().getPath();
            detachedCriteria = detachedCriteria.add(Property.forName(subProperty).eqProperty(masterId));
        } else if (org.hibernate.criterion.Property.class.isInstance(criterion.getValue())) {
            detachedCriteria = detachedCriteria
                    .add(((org.hibernate.criterion.Property) criterion.getValue()).eqProperty(masterId));
        } else {
            detachedCriteria = detachedCriteria.add(toHibernateCriterion(criterion, alias));
        }
    }

    if (subquery.getSubqueryType() == Subquery.SubqueryType.TYPE_EXISTS) {
        return Subqueries.exists(detachedCriteria
                .setProjection(Projections.property(alias + "." + subquery.getTarget().getIdentifierName())));
    } else {
        return Subqueries.notExists(detachedCriteria
                .setProjection(Projections.property(alias + "." + subquery.getTarget().getIdentifierName())));
    }
}

From source file:org.workin.persistence.hibernate.v3.dao.Hibernate3PersistenceDaoImpl.java

License:Apache License

@Override
public long countByCriteria(final DetachedCriteria criteria, final boolean distinct) {
    return getHibernateTemplate().execute(new HibernateCallback<Long>() {

        @Override/* ww  w.  j  a v a 2  s  .c  om*/
        public Long doInHibernate(Session session) throws HibernateException, SQLException {
            if (distinct)
                criteria.setProjection(Projections.distinct(Projections.rowCount()));
            else
                criteria.setProjection(Projections.rowCount());
            Criteria executableCriteria = criteria.getExecutableCriteria(session);
            return (Long) executableCriteria.uniqueResult();
        }
    });
}