Relaciones @OneToMany

JPA relaciones @OneToMany

Las relaciones uno a muchos (@OneToMany) se caracterizan por Entidad donde tenemos un objeto principal y colecci贸n de objetos de otra Entidad relacionados directamente. Estas relaciones se definen mediante colecciones, pues tendremos una serie de objetos pertenecientes al objeto principal.

Este articulo es parte de un guia completa de JPA, para ver el contenido completo puedes ir a Java Persistence API (JPA)


Un ejemplo cl谩sico para entender este tipo de relaciones son las facturas, pues tendremos una Entidad cabecera donde tengamos los datos principales de la factura, como podr铆a ser serie, cliente, total, fecha de expedici贸n, etc. Por otra parte, la factura tendr谩 una serie de l铆neas que representa cada uno de los productos vendidos. 

Veamos como quedar铆a la entidad Invoice (factura):


Podemos apreciar como hemos definido la propiedad lines como una lista (List), lo cual nos permite relacionar la factura con un n煤mero indeterminado de l铆neas, por otro lado, hemos definido la propiedad mappedBy para indicar que es una relaci贸n bidireccional, es decir, la Entidad InvoiceLine tendr谩 tambi茅n una relaci贸n hacia la Entidad Invoice.

La Entidad InvoiceLine se ver谩 de la siguiente manera:


Como dijimos hace un momento, la Entidad InvoiceLine tiene una propiedad de tipo Invoice para poderla hacer bidireccional, observemos que el nombre de la propiedad invoice corresponde con el valor del mappedBy definido en la Entidad Invoice, ya que de lo contrario JPA nos arrojar谩 un error.

Ahora pasaremos a analizar como nos auto generar铆a las tablas JPA para estas dos Entidades:

JPA relaciones @OneToMany tablas


En este imagen podemos apreciar que la tabla invoice_lines tiene la columna FK_INVOICE que ser谩 utilizada para realizar el JOIN con la tabla invoices, de tal forma que cada registro de invoice_lines que sea encontrado ser谩 convertido en una instancia de la Entidad InvoiceLine.


Dando como resultado los siguientes registros en la base de datos:

JPA relaciones @OneToMany tabla invoices
Tabla invoices
JPA relaciones @OneToMany tabla invoice_lines
Tabla invoice_lines

Ahora si podemos ver todo materializado y nos queda m谩s la forma en que la informaci贸n es almacenada. 


Conclusiones

Hemos comprobado lo simple que es crear relaciones @OneToMany y hemos podido comprobar como  la informaci贸n es almacenada, solo faltar铆a resaltar que JPA no garantiza el orden en que los elementos de la colecci贸n son insertados, es por ello, que siempre se aconseja tener una columna que indique el orden natural de los elementos para sobre esa columna hacer el ordenamiento, esto claro si nos interesa mantener el ordenamiento, en caso podemos ignorarlo.

Anterior脥ndiceSiguiente

Deja un comentario

Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *