code: @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();
      }
docs: 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.
  <p>
  You can call this with <code>restrictFieldNames</code> = <code>null</code> to get the full
  entities back.
  <p>
  You can call this method without criterion arguments to find all entities (stripped down to
  the <code>restrictFieldNames</code>).
  <p>
  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