code: public <T> List<T> asList() {
  		String cacheKey = null;
  		
  		// is the result of the query cached?
  		if (isCacheable() && transaction == null) {
  			cacheKey = getCacheKey();
  			List<Key> keys = getCacheManager().get(cacheNamespace, cacheKey);
  			if (keys != null) {
  				if (isKeysOnly()) {
  					return (List) keys;
  				} else {
  					final Map<Key, T> values = entityManager.get(keys);
  					return Lists.transform(keys, new Function<Key, T>() {
  
  						@Override
  						public T apply(Key key) {
  							return values.get(key);
  						}
  						
  					});
  				}
  			}
  		}
  		
  		// execute the query
  		List<T> result = Lists.newArrayList((Iterable<T>) asIterable());
  		if (isCacheable()) {
  			Collection<Key> keys = isKeysOnly()? result : Collections2.transform(result, new EntityToKeyFunction(classMetadata.getPersistentClass()));
  			populateCache(cacheKey, Lists.newArrayList(keys));
  		}
  		return result;
  	}
docs: Execute the provided query and returns the result as a List of java objects
  @return the list of resulting java entities