Sei sulla pagina 1di 2

RELACIONES EN HIBERNATE

En Hibernate (y en general en las bases de datos) existen 4 tipos de relaciones:


Uno a Uno
Uno a Muchos
Muchos a Uno
Muchos a Muchos

Si le ponemos direcciones a estas relaciones (unidireccional, o bidireccional) tendremos 7 tipos


de relaciones:
Uno a uno unidireccional
Uno a uno bidireccional
Uno a muchos unidireccional
Uno a muchos bidireccional
Muchos a uno unidireccional
muchos a muchos unidireccional
Muchos a muchos bidireccional (esta es igual que la relacin uno a muchos bidireccional,
as que la dejamos fuera.)

1) RELACIONES UNO A UNO


En las relaciones uno a uno un objeto entidad de una clase A est relacionado con uno y solo
un objeto entidad de una clase B.
- Unidireccional: solo el objeto A est consciente de la relacin (El objeto A tiene una referencia al
objeto B) y el objeto B NO sabe nada de esta.
Ejemplo: Una relacin Persona -> Direccion (una Persona, en teora, solo puede tener
una Direccion). Donde la Persona es la entidad "A" y la Direccion es la entidad "B". O sea,
la Persona conoce su Direccion pero la Direccion no conoce a la Persona a la que
pertenece.

La clase Persona tiene un atributo de tipo "Direccion" (con sus


correspondientes setters y getters). Por lo tanto la Persona tendr acceso a los datos de
la Direccion. En este caso se dice que Persona es la "duea" (RELATIONSHIP OWNER) de la
relacin. O sea que ella controla qu es lo que pasa cuando se realiza una modificacin en un
objeto entidad (si queremos que al eliminarse el dueo se elimine la entidad relacionada, o se
actualice, o no pase nada, etc.). Esto se configura en el archivo de mapeo XML o en las
anotaciones, dependiendo del mtodo que estemos utilizando.

- Bidireccional: las dos entidades estn conscientes de la relacin.


Ejemplo, si tenemos una relacin Pais <->Presidente (un Pais solo debera tener
un Presidente y un Presidente solo puede serlo de un Pais). En este caso ambos lados de la
relacin conocen el otro lado, o su "inverso".

Especificarlo en el archivo de configuracin:


En erl archivo de mapeo de la clase Persona agregamos el elemento para indicar la relacin uno a
uno con la clase "Direccion". Para esto usamos el elemento "<one-to-one>". Usamos el
atributo "name" para indicar cmo se llama el atributo en la clase "Persona" que indica la relacin
con "Direccion", que en este caso es "direccion":

<one-to-one name="direccion" />

Atributo CASCADE
Si queremos que la entidad "Direccion" se guarde en la base de datos en el momento en el que
se guarda la "Persona", y de la misma forma que cuando la "Persona" sea eliminada de la base
de datos tambin se elimine su correspondiente "Direccion" debemos usar el atributo "cascade"
del elemento "<one-to-one>".

Las operaciones en cascada son operaciones que se realizan en los hijos al mismo momento que
en los padres (o en las entidades relacionadas con la entidad en la que estamos realizando la
operacin)

Este atributo puede tener los siguientes valores: persist, merge, save-update, delete, lock,
refresh, evict, replicate, all, none

La mayora de los valores corresponde con un mtodo, con el mismo nombre, del
objeto Session de Hibernate, con excepcin de "all" y "none", que no corresponden con ninguno.

Por default ninguna operacin se realiza en cascada, pero nosotros dijimos que queremos que
la Direccion se actualice en el momento en el
que guardamos y eliminamos la Persona entonces indicamos como el valor
de cascade "persist, delete":

<one-to-one name="direccion" cascade="persist, delete"/>

Potrebbero piacerti anche