Acerca De Hibernate

Saludos comunidad.

El motivo de este tema es para conocer su opinión acerca del Framework Hibernate ya que he leído por ahí sobre muchas personas que comentan que para el desarrollo de una aplicación empresarial (es decir, con peso específico) suele llegar a ser tedioso el proceso de mapeo, las consultas suelen ser lentas y que incluso hay ocaciones en que el propio framework toma sus decisiones respecto a qué y como eliminar en cascada y cosas de ese tipo, otros dicen que es mejor JDBC y que no hay necesidad de complicarse, ya que con JDBC se puede lograr lo mismo y sin tener que aprender más y perder más tiempo en eso del mapeo, por ahí escuche de otro framework que es DB4O, el cual trabaja persistencia netamente con objetos y te olvidas del modelo en SQL y de tablas.

Yo apenas comienzo a practicar y hasta ahora he tenido buenos resultados en mis ejercicios, pero ya en una aplicación más seria pues me pone a dudar más que nada por lo que les comento que he leído. Quisiera conocer su opinión.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Pros y Cons

Cualquier framework va a tener adeptos, gente que dice que es la neta, y gente que dice que es lo peor que existe. Hibernate no está exento de ese fenómeno. Sin embargo ha tenido muchísima adopción en el mundo Java a nivel empresarial; es software libre; el autor del proyecto incluso fue invitado a formar parte del JCP y de hecho JDO se basó en el modelo que usa Hibernate. Creo que es el ORM más popular que existe, así que por esa parte vas a tener bastantes foros donde preguntar y ver ejemplos, etc.

Si el performance es de plano una super prioridad y no quieres nada del overhead que da un ORM como Hibernate, y las operaciones que vas a realizar son relativamente sencillas, puedes usar JDBC. Pero te recomiendo que no utilices JDBC puro; revisa el soporte que da Spring para uso de JDBC con el JdbcTemplate, SimpleJdbcTemplate, PlatformTransactionManager, ParameterizedRowMapper, etc porque eso te facilita mucho la vida incluso usando JDBC sin ningún ORM (yo lo uso para un switch transaccional donde la velocidad es sumamente importante y no puedo darme el lujo de usar Hibernate).

Sin embargo para aplicaciones web donde a veces unos milisegundos de más en el tiempo de respuesta no importan, puede convenirte Hibernate. La versión 3 te permite hacer el mapeo sin tener que usar XML, sino puras anotaciones, lo cual simplifica bastante su uso. Y el diseño de tu aplicación queda mejor.

En cuanto DB4O, no es solamente un framework, sino una base de datos de objetos; almacena directamente objetos, no es una base de datos relacional. Pero tienes que revisar muy bien los requerimientos de tu aplicación, e investigar bastante (o hacer pruebas muy extensivas) para ver si te sirve. Porque tal vez al principio digas "ah, con muy poco código almaceno mis objetos en DB4O, qué maravilla" y resulta que se van a producción y no hay manera de tener replicación, ni armar un cluster, o DB4O no acepta varios clientes o no maneja transacciones o no se pueden hacer hot backups o si hay un crash se pierde todo, etc etc etc... cosas que con una base de datos relacional ya sabes que tienes porque son productos ya muy bien establecidos.

Imagen de benek

Coincido.

Coincido con ezamudio,

La llegada de hibernate-annotations simplifica bastante los mapeos, es una solución genial a los confusos XML en proyectos largos.

Con respecto al asunto de los borrados en cascada podría ser no cuestión de Hibernate sino de la BD misma, si es que la BD está configurada para hacerlos en cascada lo hará aunque no se lo especifiques en Hibernate.

Toma en cuenta también el asunto del performance que comenta ezamudio.

Saludos.