La semana de Hibernate: algunas conclusiones

Bueno. Parece que hoy ha acabado la semana de Hibernate. Resulta que desde el pasado Jueves me he estado peleando con Hibernate por culpa de una dichosa excepción.

Resumiendoos un poco el problema. Tengo una tabla recursiva ( la típica de empleado que puede tener otros empleados a su cargo ) y dentro de esa tabla puede haber dos tipos de registros por lo que se presentaban las dos soluciones clásicas: una tabla para todo con un valor discriminador o una tabla por cada subclase.

Pues bien, resulta que la segunda alternativa no funciona. Claro, esto lo descubrí después de preguntar en los foros de hibernate y que me dijeran que no sabían de que podía ser y después de estar varios días creando un ejemplo muuuuy simplificado de mi programa para ir depurando poco a poco. Al final, la razón oficial es que HypersonicSQL no se comporta demasiado bien con la alternativa de una-tabla-por-subclase i.e. en Hibernate.

La solución propuesta desde los foros (después de decirles lo que había descubierto) fue actualizar a la última versión del CVS de Hibernate ( 2.0.1 ). Vale. Un día más para portar toda la aplicación ( y el test ) a Hibernate 2.0.1 desde Hibernate 1.2.5 para que al final .... no funcione. Además, puedo garantizar que la migración no es todo lo fácil que debería ser.

Solución: Una tabla para todas las subclases.

Bien. Este mensaje era para hacer algunas reflexiones sobre este tipo de herramientas O/R:

  • Documentación: En general excasa, y eso que Hibernate es uno de los motores que más documentación tiene, pero aún así siempre aparece algún bug que no viene reseñado, al menos en alguna página de fácil acceso.
  • Estandarización. Una de las ventajas de los Entity Beans o de JDO que no se suele resaltar mucho es la estandarización. Son especificaciones que están ahí y que son fijas. Lo que hay especificado SIEMPRE va a estar y sin condiciones, porque para eso van a ser los test. Cosas como "puedes hacer tabla-por-subclase pero al final resulta que en estas bases de datos (X,Y,Z) no te va a funcionar" nunca pueden suceder
  • Compatibilidad hacia atrás. Las herramientas O/R no suelen ser demasiado respetuosas con la compatibilidad hacia atrás. Por ejemplo, en Hibernate ni siquiera han hecho deprecated todos los cambios en las APIs que han modificado en la 2.0 ¿ Qué menos que en las versiones 1.2.X te adviertan de que esas cosas no te van a funcionar en la 2.0 ? Eso nunca va a pasar en las APIs oficiales de Java, ya que se juega el prestigio de una especificación y de muchas empresa.
  • Foros: Normalmente hay mucha prepotencia en estos foros. Lo primero que me respondieron ante mi duda en la lista de Hibernate ( y fue el propio Gavin King fue ) después de haber explicado clara y educadamente mi problema fue : "Hibernate soporta eso. Obviamente estás haciendo algo mal". La respuesta fue de esas típicas en las que marcas sólo una parte de lo que ha escrito la otra persona y sueltas la perla de sabiduría dejando mal al supuesto pesado. Después de quejarme por ese tipo de respuestas tan constructivas el trato fue diferente. ¿ La ventaja de estos motores O/R ? Suelen ser proyectos Open Source y la respuesta es muy rápida, de hecho, fueron respuestas inmediatas.

Nada más. ¿ Qué opináis ? Hibernate y compañía son productos muy potentes, pero ...., visto lo visto, ¿ vale la pena jugarse las lentejas ?

Permalink Comentarios [14]
URL de la referencia: http://weblogs.javahispano.org/mperez/entry/la_semana_de_hibernate_algunas
Comentarios:

Tienes razon Martin.. pero eso pasa con todos los proyectos Open Source... al documentación es escasa. Yo he utilziado castor en algun proyecto... y eso si que es documentación excasa¡¡¡ Menos mal q las listas de distribución/foros funcionan y las dudas, si tu ingles no es malo, te las resuelven alli.

En cualquier caso, utilizar JDO en un proyecto Open Source tampoco resolvera tus problemas..o acaso cuando has utilizado EJB no los has tenido?? Yo al menos sí :-(

Enviado por lasterra AT avahispano DOT org en July 24, 2003 a las 05:08 AM EDT #

No se Martín, el problema que tienes no me parece que tenga que ver con herramientas O-R si no con el desarrollo de OS en general, estoy seguro de que los problemas que tendrías con Oracle y su Toplink (por decir un nombre) en ese sentido serían mucho menores. Gran parte del problema es de proyectos que se hacen famosos rápidamente aunque no tienen demasiada calidad y que luego hay que limpiar.

Interesante el post de Carlos E. Perez al respecto: <a href="http://www.freeroller.net/page/ceperez/20030719#have_ejb_vendors_just_discovered">Have EJB Vendors Just Discovered O/R Mapping?</a>, en especial la <i>broma</i> sobre lo que ofrecerá EJB 5.0.

Y ya de paso, dejándolo caer, yo estoy más por los <a href="http://st-www.cs.uiuc.edu/users/johnson/DOM.html">modelos dinámicos de objetos</a>, pero no hay demasiado soporte ahí fuera para ellos, OREO y el EntityEngine de OfBiz, va siendo hora de crear el mio propio :-).

Enviado por Al en July 24, 2003 a las 07:17 AM EDT #

Que se puede decir... se comprende la cargazón acumulada a lo largo de la semana.
Sin embargo un par de opiniones:
1.-La documentación es escasa en *TODOS* (cuando *TODOS* tiende a infinito) los proyectos de software.
2.- La compatibilidad y la estabilidad de las API no es potestad unica de Sun. Aunque si es una pena que haya pocos proyectos que piensen en estas cosas al evolucionar.
3.- Prepotentes ahi en todas partes (en los bares ni te cuento). Regalales eterno tu odio.

Autorreflexion: Hasta este momento ¿tenias alguna queja? ¿Son defectos reales o producto de cuatro mamones y una mala semana? ¿cuanto son 500 dracmas? ¿ein?...

Enviado por Aitor García Rey en July 24, 2003 a las 07:21 AM EDT #

Aitor... si no me confundo, los griegos usan el EURO, así que ahora mismo, 500 dracmas, a no ser que sean muy antiguo, valen lo que valga el metan del que estan hechos, si estan en billetes ni eso ;-).

Enviado por Al en July 24, 2003 a las 08:31 AM EDT #

Aitor, no te equivoques, no tengo grandes quejas sobre Hibernate, de hecho lo voy a seguir utilizando.

Sea como sea, creo que estáis llevando mi post a un sitio a donde no lo quería llevar. No quería llegar a generalizaciones sobre proyectos software donde la documentación habitualmente es en general escasa ni tampoco generalizar sobre Open Source.

Simplemente quería centrarme en el debate Entity Beans vs JDO vs O/R ( en especial OS O/R ). Y hacer hincapié en que a veces es mejor tener un corsé que te obligue a seguir el buen camino que tener toda la libertad del mundo y poder ofrecer toda la funcionalidad del mundo a costa de tener unos efectos secundarios bastante peligroso para según que proyectos.

¿ Me explico ?, es decir, yo a lo mejor, si me estoy jugando mi prestigio dentro de mi empresa, prefiero seguir con mis entity beans que se que van a cumplir esto, esto y esto otro (porque está fijado y viene bien clarito en la especificación, aunuqe después unas implementaciones sean más pijoteras que otras ) y no arriesgarme con Hibernate u otro O/R Open Source que pueda tener mi proyecto parado X semanas.

Eso si, para mi JLibrary yo sigo con Hibernate por ahora ;)

Enviado por Unknown en July 24, 2003 a las 08:58 AM EDT #

Olé Martín¡¡ Eso me ha pasado a mí, por falta de documentación o de encontrarme un Bug que nadie quiere resolver he perdido el tiempo ganado en usar alguna herramienta OS. Tampoco se si estos problemas pasan con herramientas de pago, porque no las uso, pero realemente ayudan a platearte preguntas como ¿No es mejor utilizar JDBC a pelo? o mejor aún ¿No es mejor construirte tu propio framework e ir modeando a añadiendo funcionalidades poco a poco?

Me repito sobre los estandares, muchas veces tampoco son la solución ya que estarán mal implementados. En cualquier caso, despues de leer tu post, acojona meterse con hibernate.

Enviado por lasterra en July 24, 2003 a las 01:36 PM EDT #

Pues, yo esta semana también quería iniciarme un poco con Hibernate, y sí que es cierto que he tenido problemas.
Por ejemplo para ejecutar la demo que viene con la versión 2.0.1, hay que corregir el bat (windows :-() que viene...

Yo creo que esto viene de la carrera de versiones que vivimos. Parece que si en dos meses no se saca versión nueva el proyecto está parado. Esto lleva a versiones no suficientemente probadas, documentación desactualizada, no preocupación con la compatibilidad hacia atrás y demás.

Pero no creo que el problema sea exclusivo del Open Source...

Venga saludos a todos.

Enviado por Miki en July 25, 2003 a las 06:16 AM EDT #

¡ Que no os asuste mi post ! , ya que tan sólo es una reflexión sobre O/R vs Especificaciones ( Entity y JDO )

En general hibernate va muy bien. Tengo una estructura de unos 15 objetos, todos con relaciones entre ellos y los persiste sin ningún tipo de problemas. El único problema que tuve es el que dije, y si lo habéis leido os habréis dado cuenta de que es bastante raro un caso como ese.

Aún encima, el problema tiene una solución muy sencilla, simplemente que yo no la quise aplicar por cabezonería y preferí investigar cual era el problema.

Un saludo.

Enviado por martin en July 25, 2003 a las 08:30 AM EDT #

Hibernate es uno de los mejores ORM que existen incluyendo a las soluciones comerciales. Puede competir sin ningun problema contra Toplink, EOF y otros. La falta de documentacion puede ser suplida examinando los fuentes y entender las tuercas y tornillos. Hace unos 6 meses tuve que dejar de usar el modelador de TopLink porque era una basura y me habia hecho perder el trabajo de varias semanas. Por recomendacion mia dejamos de usar Toplink para otros proyectos.
Todos los productos de software son suceptibles a errores y fallas. No creo que la calidad depanda en si son soluciones Open Source o no.
<br>Entity Beans no te proporcionan todas las opciones de mapeo que te proporciona Hibernate, los finders son mucha mas limitados que los queries de Hibernate.
<br>Te pdria decir muchas desventajas de Entity beans pero no creo que tanga caso hacerlo.
<br>No tengo ninguna experiencia practica con JDO pero segun vi hay poca actividad en los grupos de discucion si los comparas con el de Hibernate. Es un estandar, si pero poco aceptado.

Enviado por dasol en July 26, 2003 a las 03:03 PM EDT #

dasol, estoy totalmente de acuerdo en que Hibernate y en general prácticamente todos los O/R ofrecen muchas más funcionalidades que los Entity Beans.

La discusión iba más bien por otro lado: estandarización, documentación, especificaciones que fijen el camino, etc.

Habrá que ver si progresa el <A href="http://www.jcp.org/en/jsr/detail?id=227">JSR de Data Binding y Data Access propuesto por oracle</A> y si aclara un poco el estado de las herramientas O/R o si sólo va a venir a dar más confusión.

Enviado por martin en July 28, 2003 a las 04:15 AM EDT #

Una cosa con hibernate.
Segun veo creo que somos unos cuantos, los que estamos dando nuestros primeros pasos en hibernate en estos ultimos tiempos. A lo mejor sería un buén momento para habilitar alguna sección especial en javahispano, para intentar documentar todos estos problemillas. Se me ocurre:
montar un foro específico.
montar una pequeña sección con tips sobre los problemas más típicos. Yo tuve bastantes problemas para resolver las relaciones de agregación. Es decir que cuando incluia el padre, se incluyese automáticamente el hijo. De hecho, me comprometo a mandar a javahispano la explicación de como resolverlo si se abre una sección especifica.
(Por cierto soy janatic)

Enviado por janatic en July 29, 2003 a las 02:18 AM EDT #

Janatic, lo cierto es que lo de las secciones "más específicas" ya se ha discutido mucho dentro de los "habituales" de javaHispano.

En javaHispano, ahora mismo no se crean secciones más específicas por la simple razón de que no habría suficente gente como para darle vidilla. Aunque seamos cinco o seis los que utilizamos hibernate, en cuanto tuviésemos solucionados nuestros problemas el foro quedaría desierto.

Yo soy partidario de seguir como ahora, es decir, utilizando el foro de J2EE. Aunque quizás introducir un foro más general sobre O/R también sería una opción interesante.

Enviado por martin en July 29, 2003 a las 02:48 AM EDT #

Probablemente tengas razon. Quizás baste con incluir una sección O/R en los tips, donde poner esos truquillos que vamos sacando poco a poco.
La verdad es que con que haya 3 o 4, ya merece la pena, porque me da la impresión de que todos nos damos la leche en los mismos sitios. Probablemente lo que se necesite para llenar esta subseccion de tips es extraer la info que vaya surgiendo de los foros.

Enviado por janatic en July 29, 2003 a las 03:18 AM EDT #

Y que tal si simplemente se crea un grupito de trabajo sobre Hibernate y una lista de distribución específica?.

Puede pasar que simplemente se "muera" en poco tiempo, pero bueno, si sale algo eso que tenemos.

Enviado por Al en July 29, 2003 a las 04:09 AM EDT #

Enviar un comentario:

Nombre:
Correo electrónico:
URL:

Su comentario:

Sintaxis HTML: Deshabilitado