HIBERNATE Capítulo 1: Introducción Hibernate trabaja con una sesión. Una sesión es una unidad de trabajo que representa una comunicación a la BD. Hibernate JPA es lo mismo, solo que usando anotaciones. Las anotaciones básicas ( que ense!o en los tutoriales posteriores" son tomadas de la especi#cación de JPA, la cual es la especi#cación $o#cial$ de %&' de U) (que en realidad tomó prestado muc*o de Hibernate". Hibernate tiene sus propias anotaciones, las cuales permiten *acer más cosas que las anotaciones JPA (a que estas pensadas para ser usadas de +or +orma en en-ric -rica a con con disti istin ntos tos pro proeed eedor ores es de pers ersiste isten ncia cia como como eclipselin/".
Capítulo 2: Hibernate en NetBeans y en Eclipse 2.1 Hibernate en NetBeans 0enemos la opción de trabajar *ibernate con un proecto 1eb, con un proecto en consola, con un proecto 2JB, etc. royecto !a"a #$eb% consola& ' Hibernate #(.) o superior& ' arc*i"os +,-: Los pasos para la con#uración son los siuientes3 1 0ener creada la BD con las tablas correctamente relacionadas3 )ormalmente partiremos de un modelo relacional para crear nuestros P%J%s (o entidades". 2s por eso que debemos de#nir bien las relaciones entre tablas estar seuros de colocar los nombres apropiados para que más adelante no tenamos que estar *aciendo cambios en nuestro aplicatio jaa. 2 4rear la cadena de cone5ión para la BD con la que trabajaremos Accedemos a la pesta!a sericios, *acemos clic derec*o sobre Databases, escoemos )e1 4onnection, etc.
)ota3 i trabajamos con una BD en 6L erer, en el 7ltimo paso, el asistente nos pide indicar el esquema, escoer dbo o al7n otro que *aamos usado para alojar nuestra BD. ( 4rear un proecto Jaa (1eb, consola, etc"
)ota3 i escoimos un proecto jaa 1eb en el 7ltimo cuadro del asistente de creación del proecto, marcamos la opción Hibernate, tener en cuenta que es la ersión 8.9. Arear manualmente las librer:as o JA&s de Hibernate contenidas en el cuadro rojo superior de la parte de HibernateLibraries como se e en la #ura ;.<. 2stos JA&s están contenidos en el arc*io =*ibernate>distribution> 8.?.@.inal>distC. / 4rear arc*io de con#uración de Hibernate Al #naliar la creación del proecto, crear un arc*io de tipo E'L de nombre *ibenate.c+.5ml en la ra: del classpat* de la aplicación, tambi-n conocido como el paquete de+ault. 2ste arc*io
se denomina arc*io de con#uración de *ibernate albera toda la in+ormación necesaria para la cone5ión a la BD. 2n realidad todas las +ormas que tenemos para *acer la con#uración de *ibernate para nuestro proecto la podemos *acer en estos 8 luares3 Un arc*io de propiedades llamado $*ibernate.properties$. Un arc*io E'L llamado $*ibernate.c+.5ml$ como acabamos de er. 2s el más usado. 2n códio dentro de la misma aplicación. • •
•
Los arc*ios de con#uración pueden tener cualquier nombre, pero Hibernate buscará por de+ault los arc*ios con los nombres que se *a mencionado, en la ubicación predeterminada (la ra: del classpat* de la aplicación". i queremos usar arc*ios con otros nombres deberemos especi#carlo en el códio. ) Fenerar los P%J%s3 i deseamos enerar los P%J%s de acuerdo a las tablas creadas, creamos el arc*io de inenier:a reersa mapeando el catáloo de la BD seleccionando las tablas con las que deseamos trabajar. Gemos que en *ibernate.c+.5ml, se adicionaron las tablas escoidas en este paso.
Haciendo uso del asistente de )etBeans, creamos los arc*ios de mapeo *ibernate (5ml" los P%J%s de la BD o tambi-n llamados beans. 2ntonces, se creará por cada tabla dos arc*ios3 un arc*io E'L mapeando clase>tabla. un ;do arc*io .jaa que iene a ser la entidad. • •
0 4rear el arc*io HibernateUtil en un paquete de nombre *ibernate.util por ejemplo. 2ste es una clase de utilidad en el cual se implementa el inicio de sesión de Hibernate. NTA: Aunque el *ec*o de trabajar con arc*ios E'L es bastante 7til (en alunas situaciones" puede ser bastante enorroso, especialmente en aplicaciones mu randes.
royecto !a"a #$eb% consola& ' Hibernate #(./ o inerior& ' +,- o Anotaciones: Para trabajar con anotaciones creamos un nueo proecto o si a tenemos uno en el que estemos trabajando con E'L, podemos incluir anotaciones. 1 Arear las librer:as Lueo de crear el proecto Jaa 1eb *abiendo marcado la opción *ibernate (ersión 8.9" en la 7ltima parte del asistente de creación del proecto, es necesario arear las librer:as contenidas en el cuadro rojo in+erior de la parte de HibernateAnotaciones como se e en la #ura ;.<. 2stos JA&s están contenidos en el arc*io $*ibernate> annotations.ip$
Una e que tenamos las entidades o pojos a de#nidos, antes de comenar debo decir que en realidad Hibernate no trabaja solo cuando usamos anotaciones. i recuerdan, cuando creamos la biblioteca de $HibernateAnotaciones$ entre los arc*ios que areamos para con+ormarla se encontraba $ejb8>persistence.jar$. 2ste arc*io contiene las clases de un rame1or/ llamado $JPA$ o $Jaa Persistence AP$, la cual es el AP $o#cial$ de persistencia para aplicaciones Jaa. 0rabaja utiliando lo que se conoce como un $proeedor de persistencia$ que es quien se encara de *acer el erdadero trabajo con la base de datos. 2n este caso Hibernate será el proeedor de persistencia. Las anotaciones que usaremos si son de JPA. Hibernate tambi-n proporciona alunas anotaciones, pero son por si queremos arear +uncionalidad e5tra, lo cual escapa al objetio de este tutorial. NTA Aunque usar anotaciones es mu práctico, tiene el inconeniente de que las anotaciones sólo son álidas en entornos que empleen Jaa 9 o superiores. Por tanto puede darse el caso de que una aplicación que *emos dise!ado con anotaciones tena que ser mirada para adaptarla a un cliente que usa en su entorno Jaa @.< ( al que no podamos conencer para cambiar de ersión de Jaa". Ad3untar 3a"adocs
2.2 Hibernate en Eclipse Ia sea si deseamos trabajar con arc*ios E'L o con anotaciones, para empear a trabajar es similar a trabajar en )etBeans. 1 4rear un proecto jaa del tipo que queremos trabajar (consola, 1eb, ejb, etc" 2 Arear las librer:as a. Una e creado, accedemos a las propiedades del proecto con clic derec*o lleamos a la #ura ;.@ lueo a la ;.;. b. 2n la #ura ;.; seleccionamos opción )e5t. c. 2n l #ura ;.8 seleccionamos User Libraries as: *asta crear nuestra propia biblioteca conteniendo a los respectios JA&s que nos permitirán trabajar con *ibernate. d. Al #nal debemos de tener areadas las librer:as de la #ura ;.<. NTA: A partir de *ibernate 8.?.5 se eliminaron los jar de los annotations (*ibernate>annotations.jar e *ibernate>commons>annotations.jar" pusieron esas clases directamente en el mismo jar de *ibernate (*ibernate8.jar", mientras que en *ibernate 8.9.5 anterior los annotations estaban en sus propios jars por separado.
4i5ura 2.1
4i5ura 2.2
4i5ura 2.(: Lueo de acceder al botón User Libraries... ubicamos las librer:as con las que deseamos trabajar.
4i5ura 2.: i se trabaja con Hibernate 8.? o una ersión superior a no es necesario arear la parte de HibernateAnotaciones dado que los JA&s que están a*: a están en el arc*io *ibernate8.jar.
Ad3untar 3a"adocs Para adjuntar la documentación o#cial de Hibernate (jaadocs", seuir los siuientes pasos3
1 2 (
'en7 indo1, opción Pre+erences. 2n la #ura ;.9, seleccionar la opción 2ditar. 2n la #ura ;.?, indicar la ruta donde documentación de *ibernate.
4i5ura 2./
se
encuentra
la
4i5ura 2.)
Capítulo (: Relaciones Para maor in+ormación sobre el tema reisar los aplicatios3 istemaK)oticiasKHibernate BrunoHansKPracticaKHibernate>Anot
(.1 6no a 6no
(.2 6no a 7uc*os
(.( ,uc*os a uno
(. ,uc*os a 7uc*os
NTA8 @. 2n un objeto, si una ariable es establecida como transient, sini#ca que su alor no será inclu:do como parte del estado de un objeto serialiado. 2n otras palabras, 0odos los atributos que no est-n marcados como $transient$ o con la anotación $jaa5.persistence.0ransient$ serán persistidas. ;. 2n nuestras clases entidad tenemos que implementan la inter+a erialiable. 2sto no es obliatorio pero es una buena práctica a que esto permite a las entidades poder ser serialiadas, el cual es un proceso que *ace que los objetos puedan iajar a tra-s de un stream desde un orien ser recreados en el destino. 2sto nos
permite, por ejemplo, en sistemas distribuidos, crear nuestras entidades en un seridor eniarlos a otros a tra-s de la red.