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.sakaiproject.signup.dao.SignupMeetingDaoImpl.java

License:Educational Community License

@Override
public List<String> getAllLocations(String siteId) throws DataAccessException {
    DetachedCriteria criteria = DetachedCriteria.forClass(SignupMeeting.class)
            .setProjection(Projections
                    .distinct(Projections.projectionList().add(Projections.property("location"), "location")))
            .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).addOrder(Order.asc("location"))
            .createCriteria("signupSites").add(Restrictions.eq("siteId", siteId));

    List<String> locations = (List<String>) getHibernateTemplate().findByCriteria(criteria);

    if (locations != null && !locations.isEmpty()) {
        return locations;
    }//w  w  w.  j  a va 2s .c  o m

    return null;
}

From source file:org.shredzone.cilla.core.repository.impl.PageDaoHibImpl.java

License:Open Source License

@SuppressWarnings("unchecked")
@Override/*from   w w  w. java 2 s.  c om*/
@Transactional(readOnly = true)
public List<String> proposeSubjects(String query, int limit) {
    return getCurrentSession().createCriteria(Page.class)
            .add(Restrictions.like("subject", query, MatchMode.ANYWHERE)).setMaxResults(limit)
            .addOrder(Order.asc("subject")).setProjection(Projections.distinct(Projections.property("subject")))
            .list();
}

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}.//  w  w w  .  j  av  a 2  s  .  c  o 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.workin.persistence.hibernate.v3.dao.Hibernate3PersistenceDaoImpl.java

License:Apache License

@SuppressWarnings("unchecked")
@Override//from  www. j  av  a  2  s .c  om
public <P> long countByCriteria(P parameter, final boolean distinct,
        final HibernateCriteriaQueryCallback callback) {
    AssertUtils.assertNotNull(callback, "HibernateCriteriaQueryCallback object can not be null.");
    if (callback instanceof HibernateCriteriaQueryCallbackDao)
        ((HibernateCriteriaQueryCallbackDao<P>) callback).setParameter(parameter);

    return getHibernateTemplate().execute(new HibernateCallback<Long>() {

        @Override
        public Long doInHibernate(Session session) throws HibernateException, SQLException {
            Criteria criteria = session.createCriteria(getEntityClass());
            if (distinct)
                criteria.setProjection(Projections.distinct(Projections.rowCount()));
            else
                criteria.setProjection(Projections.rowCount());

            callback.execute(criteria);
            return Long.valueOf(String.valueOf(criteria.uniqueResult()));
        }

    });
}

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/*  w  w w  . jav a2 s .co m*/
        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();
        }
    });
}

From source file:org.workin.persistence.hibernate.v4.dao.Hibernate4PersistenceDaoImpl.java

License:Apache License

@SuppressWarnings("unchecked")
@Override/*  w w w . ja v  a 2s  . c om*/
public <P> long countByCriteria(P parameter, final boolean distinct,
        final HibernateCriteriaQueryCallback callback) {
    AssertUtils.assertNotNull(callback, "HibernateCriteriaQueryCallback object can not be null.");
    if (callback instanceof HibernateCriteriaQueryCallbackDao)
        ((HibernateCriteriaQueryCallbackDao<P>) callback).setParameter(parameter);

    Criteria criteria = getCurrentSession().createCriteria(this.getEntityClass());
    if (distinct)
        criteria.setProjection(Projections.distinct(Projections.rowCount()));
    else
        criteria.setProjection(Projections.rowCount());

    callback.execute(criteria);
    return Long.valueOf(String.valueOf(criteria.uniqueResult()));
}

From source file:org.workin.persistence.hibernate.v4.dao.Hibernate4PersistenceDaoImpl.java

License:Apache License

@Override
public long countByCriteria(final DetachedCriteria criteria, final boolean distinct) {
    if (distinct)
        criteria.setProjection(Projections.distinct(Projections.rowCount()));
    else//from   w w  w . j av a2  s .c  o  m
        criteria.setProjection(Projections.rowCount());

    Criteria executableCriteria = criteria.getExecutableCriteria(getCurrentSession());
    return (Long) executableCriteria.uniqueResult();
}

From source file:osdigital.dao.AparelhoDao.java

public List<Aparelho> pesqAparelhoModelo(String modelo) {
    Session sessao = HibernateUtil.getSessionFactory().openSession();
    List lscid = null;/*from   ww w. j ava2 s .  com*/
    Criteria consulta = null;
    try {

        if (modelo == null || modelo.equalsIgnoreCase("")) {
            return null;
        } else {
            consulta = sessao.createCriteria(Aparelho.class);
            consulta.setProjection(Projections.distinct(Projections.property("apcdModelo")));
            consulta.add(Restrictions.ilike("apcdModelo", "%" + modelo + "%"));
            return lscid = consulta.list();
        }
    } catch (RuntimeException erro) {
        throw erro;
    } finally {
        sessao.close();
    }
}

From source file:osdigital.dao.CidadeDao.java

public List<Cidade> listagemCidadesPorNome(String nome) {

    Session sessao = HibernateUtil.getSessionFactory().openSession();
    try {/*w  w w.  java  2  s . co m*/
        Criteria consulta = null;
        if (nome == null) {
            consulta = sessao.createCriteria(Cidade.class);
        } else {
            consulta = sessao.createCriteria(Cidade.class);
            consulta.setProjection(Projections.distinct(Projections.property("cid_nome")));
            consulta.add(Restrictions.ilike("cid_nome", "%" + nome + "%"));
            return consulta.list();
        }
    } catch (RuntimeException erro) {
        throw erro;
    } finally {
        sessao.close();

    }
    return null;
}

From source file:reviewbot.repository.BookRepository.java

License:Creative Commons License

@Override
@SuppressWarnings("unchecked")
public List<Book> readRange(Integer length, Integer offset) {

    final Integer len = length;
    final Integer offs = offset;

    // Solution by MattC@stackoverflow
    // https://stackoverflow.com/questions/11038234/pagination-with-hibernate-criteria-and-distinct-root-entity/23618190#23618190

    Criteria criteria = getCurrentSession().createCriteria(Book.class);
    Projection idCountProjection = Projections.countDistinct("id");
    criteria.setProjection(idCountProjection);
    int totalResultCount = ((Long) criteria.uniqueResult()).intValue();

    criteria.setProjection(Projections.distinct(Projections.property("id")));
    if (offs != null)
        criteria.setFirstResult(offs);//from ww  w.ja  va  2  s. c o m
    if (len != null)
        criteria.setMaxResults(len);
    List uniqueSubList = criteria.list();

    criteria.setProjection(null);
    criteria.setFirstResult(0);
    criteria.setMaxResults(Integer.MAX_VALUE);
    criteria.add(Restrictions.in("id", uniqueSubList));
    criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

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