Para mí, Criteria es bastante fácil de entender y hacer consultas dinámicas. Pero la falla que digo hasta ahora es que carga todas las relaciones de muchos, etc., porque solo tenemos tres tipos de FetchModes, es decir, Seleccionar, Proxy y Predeterminado, y en todos estos casos carga muchos (uno puede estar equivocado si es así, ayuda Sacarme :))
El segundo problema con los Criterios es que carga el objeto completo, es decir, si solo quiero cargar EmpName de un empleado, no aparecerá este hecho, aparecerá el objeto Employee completo y puedo obtener EmpName debido a esto , realmente funciona mal en la presentación de informes . donde como HQL solo carga (no cargó asociación / relaciones) lo que desea, así que aumente el rendimiento muchas veces.
Una característica de Criteria es que lo protegerá de la inyección de SQL debido a su generación dinámica de consultas, ya que en HQL sus consultas son fijas o parametrizadas, por lo que no están a salvo de la inyección de SQL.
Además, si escribe HQL en sus archivos aspx.cs, entonces está estrechamente relacionado con su DAL.
En general, mi conclusión es que hay lugares donde no puedes vivir sin HQL como informes, así que úsalos de otra manera. Los criterios son más fáciles de administrar.