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. ]]>