Mapeos de Asociación
Introducción
Los mapeos de asociación son frecuentemente las cosas mas difíciles
de hacer correctamente. En esta sección iremos a través de los casos
canónicos uno a uno, comenzando con los mapeos unidireccionales, y considerando
luego los casos bidireccionales. Usaremos Person y Address
en todos los ejemplos.
Clasificaremos las asociaciones por cuanto mapeen o no a una tabla
de unión interviniente, y por su multiplicidad.
Las claves foráneas que aceptan valores nulos (en adelante, nullables)
no son consideradas una buena práctica en el modelado tradicional de datos,
así que todos nuestros ejemplos usan claves foráneas no nullables.
Esto no es un requerimiento de Hibernate, y todos los mapeos funcionarán
si quitas las restricciones de nulabilidad.
Asociaciones Unidireccionales
muchos a uno
Una asociación unidireccional muchos-a-uno es el tipo
más común de asociaciones unidireccionales.
]]>
uno a uno
Una asociación unidireccional uno-a-uno en una clave primaria
es casi idéntica. La única diferencia es la restricción de unicidad
de la columna.
]]>
Usualmente, una asociación unidireccional uno-a-uno en una
clave primaria usa un generador de id especial. (Observa que hemos
invertido el sentido de la asociación en este ejemplo).
person
]]>
uno a muchos
Una asociación unidireccional uno-a-muchos en una clave foránea
es un caso muy inusual, y realmente no está recomendada.
]]>
Creemos que es mejor usar una tabla de unión para este tipo de asociación.
Asociaciones unidireccionales con tablas de unión
uno a muchos
Una asociación unidireccional uno-a-muchos en una tabla de unión
es más preferible. Observa que especificando unique="true", hemos
cambiado la multiplicidad de muchos-a-muchos a uno-a-muchos.
]]>
muchos a uno
Una asociación unidireccional muchos-a-uno en una tabla de unión
es bastante común cuando la asociación es opcional.
]]>
uno a uno
Una asociación unidireccional uno-a-uno en una tabla de unión
es inusual en extremo, pero posible.
]]>
muchos a muchos
Finalmente, tenemos una asociación unidireccional muchos-a-muchos
]]>
Asociaciones Bidireccionales
uno a muchos / muchos a uno
Una asociación bidireccional muchos-a-uno es
el tipo más común de asociación. (Esta es la relación
estándar padre/hijo.)
]]>
uno a uno
Una asociación bidireccional uno-a-uno en una clave foránea
es bastante común.
]]>
Una asociación bidireccional uno-a-uno en una clave primaria
usa el generador de id especial.
person
]]>
Asociaciones bidireccionales con tablas de unión
uno a muchos / muchos a uno
Una asociación bidireccional uno-a-muchos en una tabla de unión.
Observa que el inverse="true" puede ir a cualquier lado de la asociación,
en la colección, o en la unión.
]]>
uno a uno
Una asociación bidireccional uno-a-uno en una tabla de unión
es inusual en extremo, pero posible.
]]>
muchos a muchos
Finalmente, tenemos una asociación bidireccional muchos-a-muchos.
]]>