Ejemplo: Varios Mapeos Este capítulo muestra mapeos de asociaciones más complejos. Empleador/Empleado El siguiente modelo de la relación entre Employer y Employee usa una clase de entidad real (Employment) para representar la asociación. Esto se ha hecho esto porque podría haber más de un período de empleo para los mismos dos participantes. Se usan componentes para modelar valores monetarios y nombres de empleado. He aquí un documento de mapeo posible: employer_id_seq employment_id_seq employee_id_seq ]]> Y he aquí el esquema de tablas generado por SchemaExport. Autor/Obra Considera el siguiente modelo de las relaciones entre Work, Author y Person. Representamos la relación entre Work y Author como una asociación muchos-a-muchos. Elegimos representar la relación entre Author y Person como una asociación uno-a-uno. Otra posibilidad hubiese sido que Author extendiera Person. El siguiente documento de mapeo representa estas relaciones correctamente: ]]> Hay cuatro tablas en este mapeo. works, authors y persons tienen los datos de obra, autor y persona respectivamente. author_work es una tabla de asociación enlazando autores a obras. He aquí el esquema de tablas, tal como fue generado por SchemaExport. Cliente/Orden/Producto Ahora considera un modelo de las relaciones entre Customer, Order y LineItem y Product. Hay una asociación uno-a-muchos entre Customer y Order, pero, ¿cómo deberíamos representar Order / LineItem / Product? He elegido mapear LineItem como una clase de asociación representando la asociación muchos-a-muchos entre Order y Product. En Hibernate, esto se llama un elemento compuesto. El documento de mapeo: ]]> customers, orders, line_items y products tienen los datos de cliente, orden, ítem de línea de orden y producto respectivamente. Además line_items actúa como una tabla de asociación enlazando órdenes con productos. Mapeos misceláneos de ejemplo Todos estos ejemplos están tomados de la batería de pruebas de Hibernate. Encontrarás muchos otros mapeos de ejemplo útiles allí. Mira en la carpeta test de la distribución de Hibernate. POR HACER: poner palabras alrededor de este material Asociación uno-a-uno "Tipificada" name 'HOME' name 'MAILING' ]]> Ejemplo de clave compuesta ( select sum(li.quantity*p.price) from LineItem li, Product p where li.productId = p.productId and li.customerId = customerId and li.orderNumber = orderNumber ) ( select sum(li.quantity) from LineItem li where li.productId = productId ) ]]> Muchos-a-muchos con atributo de clave compuesta compartido org org ]]> Discriminación basada en contenido case when title is not null then 'E' when salesperson is not null then 'C' else 'P' end ]]> Asociaciones sobre claves alternativas ]]>