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