/** * Gets the results, that match a variable number of passed criterions, but return a * stripped version of the entities, where only the fieldNames in <code>restrictFieldNames</code> * have their actual values set. * * You can call this with <code>restrictFieldNames</code> = <code>null</code> to get the full * entities back. * * You can call this method without criterion arguments to find all entities (stripped down to * the <code>restrictFieldNames</code>). * * If this is called as <code>findByCriteriaRestricted(null)</code> the return value equals the * return value of <code>findByCriteria()</code>. * * @param restrictFieldNames * @param criterion * @return * @throws HibernateException */ @SuppressWarnings("unchecked") public List<E> findByCriteriaRestricted(List<String> restrictFieldNames, Criterion... criterion) throws HibernateException { LOG.trace("Finding instances of " + entityClass.getSimpleName() + " based on " + criterion.length + " criteria"); Criteria criteria = createDistinctRootEntityCriteria(criterion); if (restrictFieldNames != null){ ProjectionList projectionList = Projections.projectionList(); for (String restrictFieldName : restrictFieldNames) { PropertyProjection pp = Projections.property(restrictFieldName); projectionList.add(pp, restrictFieldName); } criteria.setProjection(projectionList); criteria.setResultTransformer( Transformers.aliasToBean(entityClass) ); } return criteria.list(); }
public List<String> lockedPipelines() { return (List<String>) transactionTemplate.execute(new TransactionCallback() { @Override public Object doInTransaction(TransactionStatus status) { PropertyProjection pipelineName = Projections.property("pipelineName"); Criteria criteria = sessionFactory.getCurrentSession().createCriteria(PipelineState.class).setProjection(pipelineName).add( Restrictions.eq("locked", true)); criteria.setCacheable(false); List<String> list = criteria.list(); return list; } }); }