Cambios

De ChuWiki
Saltar a: navegación, buscar

Ejemplo de tabla asociada a valores simples con Hibernate

538 bytes añadidos, 18:35 11 feb 2009
m
sin resumen de edición
== Introducción ==
Partiendo de [[Ejemplo sencillo con Hibernate]] y [[Ejemplo sencillo con asociaciones en Hibernate]], seguimos ahora añadiendo unos valores simples a una clase [[:Categoría:Java|java]]. En concreto, haremos que nuestra clase ''Person '' tenga asociados varios ''String '' representando los ''e-mail '' de la persona.
Aquí tienes disponibles todos los fuentes y ficheros de configuración de [http://code.google.com/p/chuidiang-ejemplos/source/browse/#svn/trunk/ejemplo-hibernate/src/main/java/com/chuidiang/ejemplos/hibernate/ejemplo3 este ejemplo con Hibernate].
== Añadimos ''e-mail '' a la clase ''Person '' ==
En nuestra clase ''Person '' sólo tenemos que añadir un ''Set '' de ''String'', para guardar los ''e-mail''. Ponemos además sus correspondientes métodos set''setEmailAddresses() '' y get''getEmailAddresses()''. El método ''toString() '' lo modificamos para que muestre los datos de ''Person '' junto con todos sus ''e-mail''.
<pre>
== Fichero de mapeo de ''Person '' ==
Al fichero ''Person.hbm.xml '' correspondiente a la clase ''Person '' le añadimos una nueva etiqueta ''<set ...> '' para indicar este nuevo conjunto de posibles valores
<pre>
...
<class name="com.chuidiang.ejemplos.hibernate.ejemplo3.Person" table="PERSON"> ... <set name="emailAddresses" table="PERSON_EMAIL_ADDR"> <key column="PERSON_ID" /> <element type="string" column="EMAIL_ADDR" /> </set> ... </class>
...
</pre>
* ''<set name="emailAddresses" ... '' : Indica el nombre del atributo en la clase ''Person''* ''<set ... table="PERSON_EMAIL_ADDR" '' : Indica la tabla de base de datos en la que queremos que se guarden las relaciones. Si no ponemos nombre de tabla, se usará el mismo valor que en ''name'', es decir, ''emailAddresses''.* ''<key column="PERSON_ID"/> '' : Indica la clave primaria de ''Person'', que se usará también en esta nueva tabla.* ''<element type="string" ... '' : Indica que los posibles valores son de tipo ''String''. En el [[Ejemplo sencillo con asociaciones en Hibernate]] se asociaban dos clases (''Person '' y ''Event'') con cierta entidad cada una de ellas y, por eso, en vez de ''<element... '' se ponía ''<many-to-many.... '' Aquí, al ser un ''String '' un tipo simple, se pone ''<element...''* ''<element ... column="EMAIL_ADDR" '' : Nombre para la columna con el tipo simple. Por supuesto, ''String '' no nos gusta como nombre de columna.
== Fichero de configuración de ''Hibernate '' ==
El fichero de configuración de ''Hibernate '' no tiene nada especial, es igual que en los dos ejemplos anteriores. En el enlace tienes el fichero completo [http://code.google.com/p/chuidiang-ejemplos/source/browse/trunk/ejemplo-hibernate/hibernate3.cfg.xml hibernate3.cfg.xml].
== El código de ejemplo ==
Necesitamos la clase [http://code.google.com/p/chuidiang-ejemplos/source/browse/trunk/ejemplo-hibernate/src/main/java/com/chuidiang/ejemplos/hibernate/ejemplo3/HibernateUtil.java HibernateUtil.java] al igual que en los ejemplos anteriores, donde se carga el fichero de configuración de ''Hibernate '' y se pone el código para establecer una ''SessionFactory '' única para toda la aplicación.
En el ''main() '' del código de [http://code.google.com/p/chuidiang-ejemplos/source/browse/trunk/ejemplo-hibernate/src/main/java/com/chuidiang/ejemplos/hibernate/ejemplo3/Ejemplo3.java?r=6 Ejemplo3.java ] sólo insertaremos una persona en base de datos, luego le añadiremos el ''e-mail '' y finalmente haremos la consulta para mostrar lo insertado en pantalla. Puesto que la inserción y la consulta es igual que en el ejemplo anterior, vamos sólo con la parte de asociar un ''e-mail''. Ese código está en un método
<pre>
</pre>
Símplemente Simplemente se carga la ''Person '' llamando a ''session.load()'', se le añade un ''e-mail '' con ''aPerson.getEmailAddresses().add(emailAddress) '' y basta hacer un ''session.getTransaction().commit() '' para que ''Hibernate '' detecte que ''aPerson '' tiene un ''e-mail '' nuevo y lo guarde en base de datos.
[[Categoría:Hibernate]]

Menú de navegación