Criteria Query nos permite definir consultas con un estilo orientado a objetos, muy distinto al clásico SQL o HQ
Su código es más complicado que el de HQL ya que necesita un análisis más detallado ya que utiliza objetos.
Una de las ventajas de Criteria es que puede montar consultas dinámicas más fácil, como por ejemplo, si queremos que tenga un where con varias opciones:
Criteria criteria = session.createCriteria(Coche.class);
if (nombre != null) {
criteria.add(Restrictions.eq("color", color));
}
if (edad != null) {
criteria.add(Restrictions.eq("puertas", puertas));
}
List coches = criteria.list();
Y en HQL tendriamos que concatenar string y esto puede inducir errores:
String query = "from Coche where color like 'Rojo%' and puertas > 2;";
List coches = sess.createQuery(query).list();