Persistencia de Objetos Java: El Camino hacia Hibernate

Si ests trabajando con programacin orientada a objetos y bases de datos relacionales, seguramente habrs observado que estos son dos paradigmas diferentes. El modelo relacional trata con relaciones, y conjuntos -- es muy matemtico por naturaleza. Sin embargo, el paradigma orientado a objetos trata con objetos, sus atributos y asociaciones de unos con otros. Tan pronto como quieras persistir los objetos utilizando una base de datos relacional observars que: hay una desaveniencia entre estos dos paradigmas, la tambin llamada diferencia objeto-relacional. Un mapeador objeto-relacional (u ORM para abreviar) nos ayudar evitar esta diferencia.

Bien, cmo se manifiesta esta diferencia? Si tienes objetos en tu aplicacin y algunas veces alcanzas el punto donde quieres que sean persistentes, normalmente abrirs una conexin JDBC, crears una sentencia SQL y copiaras todos los valores de tus propiedades sobre la seleccin. Esto podra ser fcil para un objeto pequeo -- pero considera esto para un objeto con muchas propiedades. Este no es el nico problema. Qu pasa con las asociaciones? Si tu objeto Gata quiere almacenar una List de gatitos? Tambin los almacenars? Automticamente? Manualmente? Qu pasa con las restricciones de claves ajenas?

Lo mismo aplica para la carga -- asumamos que cargas un objeto Gata desde la base de datos y que tiene una coleccin de Gatitos. Cargars lo gatitos tambin? No los cargars ahora pero si ms tarde? Si cargas los Gatitos, considerars que cada objeto Gatito tiene una asociacin con todava ms objetos. En este caso, sera mejor cargar todo el rbol de objetos. No cargar los gatitos tampoco ser mejor -- tendrs que cargarlos explcitamente ms tarde si quieres acceder a ellos.

Como puedes ver, la diferencia objeto-relacional se amplia muy rpidametne si tienes grandes modelos de objetos. Y hay muchas ms cosas a considerar como la carga lenta, las referencias circulares, el cach, etc. De hecho, se han realizado estudios que demuestran que el 35% del cdigo de una aplicacin se produce para mepear datos entre la aplicacin y la base de datos.

Entonces, qu puede hacer por t un ORM? Un ORM bsicamente intenta quitarte la mayora de esa carga de tus hombros. Con un buen ORM, slo tienes que definir una vez la forma en que tus clases se mapean a tablas -- que propiedad se mapea a qu columna, que clase se mapea a qu tabla, etc. Despus de esto, deberas poder hacer cosas como estas:

Con un buen ORM puedes tomar los objetos Java que usas en tu aplicacin y decirle al ORM que los persista:

     orm.save(myObject);

Esto generar automticamente todo el SQL necesario para almacenar el objeto. Un ORM te permite cargar tus objetos igual de fcilmente:

     myObject = orm.load(MyObject.class, objectId);

Un buen ORM tambin aportar un buen lenguaje de consultas:

     List myObjects = orm.find(
          "FROM MyObject object WHERE object.property = 5");

Observa que este es un ejemplo muy simple, y que tus consultas podran ser ms potentes. Podran expandir mltiples asociaciones, por ejemplo:

     List myObjects = orm.find(
          "FROM Person person 
           WHERE person.marriedTo.address.street LIKE %something%");

Esto probablemente se traducir a una sentencia SQL que utiliza mltiples uniones, que sera mucho ms complicada de escribir. Un ORM tambin rellenar automticamente los objetos devueltos con sus datos, e incluso sus asociaciones (si es necesario).

Espero que ahora conozcas un poco ms lo que es un ORM.

.Por qu Hibernate?

Hibernate es en mi opinin el mapeador objeto-relacional de cdigo abierto ms maduro y ms completo que hay ahora. Se utiliza muy ampliamente y se desarrollada activamente. Hibernate tambin soporta una de las mayores comunidades de Open Source que he encontrado.

COMPARTE ESTE ARTÍCULO

ENVIAR A UN AMIGO
COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN GOOGLE +
¡SÉ EL PRIMERO EN COMENTAR!
Conéctate o Regístrate para dejar tu comentario.