2010-05-21 33 views
9

En el tutorial de Hibernate, el capítulo 25 de las mejores prácticas dice que deberíamos usar una relación de uno a varios en lugar de uno de muchos a muchos con una clase de enlace intermedio. No puedo ver cuál es su beneficio: ¿por qué es mejor crear una entidad 3D mientras que muchos a muchos pueden generar una tabla de unión que actúa como este enlace intermedio? Sin embargo, esta recomendación debe estar ahí por una buena razón.2 de uno a muchos en lugar de 1 de muchos a muchos

¿Alguien puede explicar el motivo de esta recomendación? Gracias.

Respuesta

8

relaciones muchas a muchas veces desarrollan percebes — datos adicionales que están asociados con la relación en sí, en lugar de cualquiera de los participantes en la relación (en mi experiencia, esta es la norma en lugar de la excepción). Por ejemplo, los miembros y grupos pueden estar asociados de muchas maneras, y desea saber cuándo un miembro se unió a un grupo, cuál es su estado de membresía (nuevo, pendiente, suspendido, ...) y así sucesivamente.

Si comienza modelando la relación directamente como muchos y escribe todo su código en consecuencia, la primera columna adicional que llegue a la tabla de unión romperá su modelo y un montón de código.

+0

+1 (y creo que también hay razones de rendimiento para no usar una tabla de muchos a muchos: hibernate tendrá dificultades para optimizar la actualización de la tabla de combinación.) – Thierry

+0

@Thierry, no se puede evitar el "muchos" -to-many "(prefiero llamarlo la tabla de unión) al modelar una relación de muchos a muchos. Lo que estoy diciendo no es que no deba tener una tabla de unión, sino que debe modelar la tabla de unión directamente en el ORM, en lugar de implicarlo a través de propiedades de colección en los objetos relacionados. –

+0

Sí, estoy completamente de acuerdo con usted, y hay un error ortográfico en lo que escribí: quería decir que muchos-a-muchos pueden ser menos eficientes que dos "muchos a uno" (así que en lugar de "no usar" yo quería escribir 'para usar', que es bastante el significado opuesto -_-). Entonces, incluso cuando sepa que no tendrá ninguna otra propiedad en la tabla de unión, podría ser una buena idea considerar mapearla como una entidad. – Thierry