public <T> List<T> getListByNativeQuery(BasicDBObject query,String key, OrderBy order,int limit, Class<T> clazz) throws PersistenceException {
		try {
			List<DBObject> listDbObj = null;
			DBCollection collection = operation.getCollection(getCollectionName(clazz));
			BasicDBObject orderBy = null;
			if (key != null && order != null)
				orderBy = new BasicDBObject().append(key, order.value);	
			if (orderBy != null) {
				if (limit == -1) 
					listDbObj = collection.find(query).sort(orderBy).toArray();
				else
					listDbObj = collection.find(query).sort(orderBy).limit(limit).toArray();
			} else {
				if (limit == -1)
					listDbObj = collection.find(query).toArray();
				else
					listDbObj = collection.find(query).limit(limit).toArray();
			}
			return convertDbObjectToObject(clazz, listDbObj);
		} catch (DataAccessResourceFailureException e) {
			throw new PersistenceException(e.getMessage());
		} catch (MongoException e) {
			throw new PersistenceException(e.getMessage());
		} catch (Exception e) {
			throw new PersistenceException(e.getMessage());
		}
	}