Consultas
NHibernate soporta dos diferentes tipos de esquemas para realizar consultas: Hibernate Query Language (HQL) y Consultas de Criterios (también puedes realizar consultas en SQL convencional, pero perderá portabilidad al hacerlo). HQL es la forma más sencilla de las 2 ya que se parece mucho a SQL – usas From, where, aggregates, order by, group by, etc. Sin embargo en vez de consultar directamente contra tus tablas, escribes consultas contra tu dominio - lo que significa que HQL soporta los principios de la orientación a objetos tales como la herencia y el polimorfismo. Ambos métodos de consulta son abstracciones arriba de SQL, lo que significa que obtienes portabilidad total – lo único que necesitas hacer para dirigirse a una base de datos diferente es cambiar la configuración de su dialecto.
|
Con la liberación de .NET 3.5 finalmente se ha agregado una colección HashSet al marco de trabajo. Idealmente, versiones futuras agregaran otro tipo de conjuntos con un OrderedSet. Los conjuntos son colecciones muy útiles y eficientes, ¡así que considera agregarlos a tu arsenal de herramientas! Puedes aprender más leyendo el artículo en el que Jason Smith describe los conjuntos.
|
HQL funciona a partir de la interfaz IQuery, que se crea con la invocación del método CreateQuery en tu sesión. Con IQuery puedes regresar entidades individuales, colecciones, parámetros substitutos y más. Aquí hay algunos ejemplos:
string lastName = "allen";
ISession session = _sessionFactory.OpenSession();
//retrieve a salesperson by last name
IQuery query = s.CreateQuery("from SalesPerson p where p.LastName =
'allen'");
SalesPerson p = query.UniqueResult<SalesPerson>();
//same as above but in 1 line, and with the last name as a variable
SalesPerson p = session.CreateQuery("from SalesPerson p where p.LastName = ?").SetString(0, lastName).UniqueResult<SalesPerson>();
//people with few sales
IList<SalesPerson> slackers = session.CreateQuery("from SalesPerson person where size(person.Sales) < 5").List<SalesPerson>();
Esta es solo una muestra de lo que se puede hacer con HQL (el ejemplo que puede descargarse tiene algunos ejemplos ligeramente más complicados).
5a8c3240-1cb7-44ae-b444-5e3a988ee42c|0|.0