nhibernate orm legacy ibatis

¿Utilizaría NHibernate para un proyecto con una base de datos heredada, que está parcialmente fuera de su control?



orm legacy (3)

Para mí, la respuesta es actualmente: No, usaría iBatis, porque NHibernate es un problema, cuando el modelo de base de datos y el modelo de objetos no están sincronizados. Si no tengo control total sobre la base de datos, termino con mucho trabajo.

¿Por qué pregunto?

Bueno, antes que nada: nunca usé NHibernate. Lo sé desde la superficie. He leído sobre las ventajas de iBatis para las bases de datos heredadas.

Segundo: Recientemente tuve una conversación con alguien que trabajó con Hibernate (jep, sin ''N'' antes de Hibernate). Me dijo que los marcos ORM ahora son bastante avanzados y abogó por Hibernate. Como no estaba interesado en NHibernate, no hice un seguimiento de los acontecimientos recientes.

Tal vez es hora de reconsiderar mi respuesta, ¿o no?


He estado usando nHibernate en una aplicación existente. Lo uso para todos los nuevos desarrollos, no tengo intención de portar las cosas existentes, ya sea porque no hay una razón convincente, pero para cosas nuevas en el proyecto funciona muy bien.

Si vas a portar el código, deberías poder cambiar la base de datos para que concuerde mejor con tu modelo de dominio, sin mucho impacto (dependiendo de cuán permeable sea tu base de datos, es decir, quién acceda a ella). Sin embargo, cambiar el modelo de dominio tendría un impacto en la aplicación.


Sí, considere NHibernate. Es el estándar de oro por una razón. He oído que iBATIS admite posibilidades locas de mapeo, pero con IUserType de NHibernate puedes mapear cualquier cosa, incluso columnas realmente extrañas.

@Ahmad, el objetivo de ORM es evitar un acoplamiento estrecho entre tus objetos y tu esquema. Si tienes este problema, lo estás haciendo mal.

Además, con NHibernate hay muchas opciones para consultas personalizadas, propiedades de fórmula y procedimientos almacenados. HQL es extremadamente poderoso y Criteria es flexible.

Creo que estarás haciendo un flaco servicio a tus clientes si no alzas el NHibernate.


iBatis es ciertamente fácil de asignar objetos a sistemas de bases de datos heredados.

Más recientemente, NHibernate 1.2 y 2.0 tienen un conjunto de características que pueden hacer que reconsidere iBatis.

NHibernate funciona con claves compuestas, que pueden ocurrir con frecuencia en bases de datos antiguas, no siempre es agradable trabajar con ellas, pero el soporte está ahí para esto.

NHibernate puede utilizar Procedimientos almacenados para operaciones CRUD en entidades, también vistas de bases de datos.

Las colecciones pueden ser procedimientos almacenados personalizados o consultas SQL. Las colecciones pueden usar el atributo property-ref cuando la relación Foreign Key no se asigna directamente a la clave principal en el otro lado.

Algunas de estas características pueden restar rendimiento / potencia de nhibernate, es decir, Lazy Loading with property-ref no funciona (¿nada?), Pero en la mayoría de los casos hay razones para ello.

Otros puntos: (que no están realmente relacionados con su base de datos heredada pero que aún pueden ayudar a decidir sobre una opción de tecnología)

La comunidad Nhibernate parece mucho más rica que la iBatis. Estoy en ambas listas y el volumen de soporte para NHibernate es bastante grande en comparación con el grupo iBatis. Entonces, el apoyo debería ser más fácil.

También hay una cantidad creciente de herramientas contrib / de terceros para NHibernate. Cosas como The NHibernate Profiler, Nhibernate Query Analyzer, NHibernate Contrib, Fluiber NHibernate por nombrar algunos.

Tal vez pueda ampliar las ventajas que cree que tiene actualmente iBatis. NHibernate ciertamente ha estado bastante activo recientemente y ha ganado muchas características nuevas, muchas de las cuales ayudan en esquemas heredados / difíciles de modificar.

Y para responder a la pregunta, sí usamos NHibernate con bases de datos heredadas que tienen relaciones espantosas, claves compuestas, relaciones rotas. También tenemos una pequeña cantidad de código basado en iBatis. Sin embargo, ya no escribimos ningún código iBatis.