Hacia un NHibernate 2.0
NHibernate encuentra en la versión 1.2.0 GA, asimismo se está preparando para la versión 2.0 que va a contar con muchos ports disponibles en la versión de Hibernate 3.2.5 GA para Java.
Se hicieron en este lapso de tiempo modificaciones significativas en el Core de NHibernate, grandes reestructuraciones para poder introducir las nuevas caracteristicas, en este post pueden ver el resultado de dichas reestructuraciones.
NHibernate está tomando mucho color ahora, algunas de las features que se van a poder usar en la nueva versión son:
StatelessSession: IStatelessSession es la interfaz que nos va a permitir manejarnos con sessiones sin caché de primer nivel. Creada especialmente para poder hacer guardados/actualizaciones/borrados en modo masivo. IStatelessSession posee una semántica similar a ISession. Ahora, ISessionFactory tiene responsabilidad de la factoría de ISession como así también de IStatelessSession.
EventListeners: Son clases que nos permiten interceptar las acciones que NHibernate realiza antes o despues de que las haga. Con la versión actual de NHibernate podiamos realizar intercepciones, por medio de las interfaces ILifecycle e IInterceptors. Ahora podemos hablar con NHibernate a un nivel muy bajo, antes de que se haga el guardado en la base de datos, o después que lo hizo por medio de EventListeners.
EntityName: es una característica que nos va a permitir tratar a las clases por un nombre único. También vamos a poder tratar a 1 clase con 2 entity names diferentes (imposible hasta ahora). Algo que va a desaparecer en NHibernate son las consultas de un tipo haciendo uso de typeof(<Nombre Del Tipo>), van a permanecer solamente llamadas con Entity Name y métodos genéricos. Por ejemplo:
- Session.Get<Foo>(id);
- Session.Get("TheFooEntity",id);
Ambas serían consultas equivalentes, en la 2da es un método que retorna System.Object y usando EntityName. Un preview de esto lo pueden ver en IStatelessSession, que ya tiene los métodos estructurados de esta manera. Como lo pueden ver, esto va a provocar un breaking change en la estructura de ISession.
DetachedQuery: este es el hermano de DetachedCriteria pero para HQL, con esto vamos a poder crear consultas separadas de la Session, eso ayuda a jugar un poco en nuestras DAOs. Era una opción faltante en NHibernate debido a que hay cosas que no se pueden hacer solamente usando Criteria. Esta implementación ya estuvo disponible desde hace tiempo en uNHAddIns.
Stadistics: Con esta característica vamos a poder hacer estadisticas de nuestras consultas principalmente. Un ejemplo que seguramente a muchos les va a gustar, nos dará las herramientas para poder calcular el hit-ratio cache, es decir, la tasa de asiertos en la caché de primer nivel.
Todo entre Transacciones: este es otro breaking change para tener igual comportamiento que en Hibernate. Cuando querramos hacer un Save/Update/Delete en la base de datos, va a tener que estar encerrado en transacciones. Actualmente, es posible hacerlo sin ellas.
