A ver, estas confundido, Hydrate es el proceso de transformar una instancia de Doctrine_Query en un set de datos, ya sea un grafo de objetos o un array que represente el grafo.
 
Hay varios tipos de data hydrators, los mas utilizados son:  
- HYDRATE_OBJECT
- HYDRATE_ARRAY
- HYDRATE_SCALAR
- HYDRATE_SINGLE_SCLALAR
El tipo por defecto es HYDRATE_OBJECT, este carga los datos con modelos/clases existentes, con el costo que esto tiene, hay que instanciar y setear datos, es por esto la recomendación de utilizar HYDRATE_ARRAY cuando no haya lógica alguna, por ejemplo, si estas trabajando con ordenes y productos, lo mas probable es que quieras aplicar algún descuento por cantidad, calcular el envio, etc..., en este caso tiene sentido HYDRATE_OBJECT, ahora si voy a mostrar las últimas 10 noticias del blog, para que quiero objetos ?, si no voy a hacer calculo alguno, es mejor opción HYDRATE_ARRAY. 
Lo que debe quedar claro es que siempre se hace el hydrate lo que cambia es el tipo de hydrator y este se puede especificar en el DQL, un ejemplo(con D2):    
Código PHP:
Ver original- //as Object 
- $query = $em->createQuery('SELECT u FROM User u'); 
- $users = $query->getResult(Query::HYDRATE_OBJECT); 
-   
- //as Array 
- $query = $em->createQuery('SELECT u FROM User u'); 
- $users = $query->getResult(Query::HYDRATE_ARRAY); 
-   
- //or shortcut 
- $users = $query->getArrayResult(); 
Talves en base a esto puedas re formular alguna de tus preguntas. 
Saludos.