protected List<?> find(Session session,
        String propertyName,
        Object value,
        String sortByPropertyName) throws InvalidHibernateSessionException,
        InvalidCriterionException,
        InvalidCriterionValueException,
        InvalidSortByPropertyException,
        DAOException {
        if(session == null) {
            throw new InvalidHibernateSessionException("La session Hibernate ne peut être null");
        }
        if(propertyName == null) {
            throw new InvalidCriterionException("La propriété à utiliser ne peut être null");
        }
        if(value == null) {
            throw new InvalidCriterionValueException("La valeur à trouver ne peut être null");
        }
        if(sortByPropertyName == null) {
            throw new InvalidSortByPropertyException("La propriété utilisée pour classer ne peut être null");
        }
        try {
            List<?> results = Collections.EMPTY_LIST;
            if(value instanceof Date) {
                results = findByDate(session,
                    propertyName,
                    (Date) value,
                    sortByPropertyName);
            } else {
                final Criteria criteria = session.createCriteria(getDtoClass());
                criteria.add(Restrictions.eq(propertyName,
                    value));
                criteria.addOrder(Order.asc(sortByPropertyName));
                results = criteria.list();
            }
            return results;
        } catch(HibernateException hibernateException) {
            throw new DAOException(hibernateException);
        }
    }