Relaciones @OneToOne

Las relaciones One to One (@OneToOne) se caracterizan porque solo puede existir una y solo una relaci贸n con la Entidad de destino, de esta forma, la entidad marcada como @OnoToOne deber谩 tener una referencia a la Entidad destino y por ning煤n motivo podr谩 ser una colecci贸n. De la misma forma, la Entidad destino no podr谩 pertenecer a otra Instancia de la Entidad origen.

Solo para ponernos en contexto, las relaciones @OneToOne se utilizan cuando existe una profunda relaci贸n entre la Entidad origen y destino,de tal forma que la entidad destino le pertenece a la Entidad origen y solo a ella, por ende, la existencia de la entidad destino depende de la Entidad origen.

Para comprender mejor todo este trabalenguas, analicemos el caso pr谩ctico de una factura, cuando creamos una factura, la llevamos con nuestro cliente para que la pague, este pago puede ser una entidad por separada que lleve el control de la fecha de pago, monto pagado, m茅todo de pago, etc. Veamos como quedar铆an esta Entidades

Entidad Invoice:

Entidad Payment:

Estas dos Entidades crear谩n las siguientes tablas:

Como podemos observar, la tabla payments tiene la columna FK_INVOICE que hace relaci贸n con la tabla invoices.

Algo que hay que tomar en cuenta, es que tanto la Entidad Invoice como Payment tiene anotada como @OneToOne a la otra entidad, sin embargo, solo payments ha creado la columna para hacer el JOIN, esto se debe a que esta es la que tiene la anotaci贸n @JoinColumn, la cual nos permite establecer como se llamar谩 la columna para realizar el JOIN, adicional, la Entidad Invoice tiene definida la propiedad mappedBy de la anotaci贸n @OneToOne, esta propiedad es muy importante, pues le permite hacer una relaci贸n bidireccional, si no la pusi茅ramos, JPA agregar铆a una columna adicional en la tabla invoices, y guardar铆a el pago como un nuevo registro.

Veamos un ejemplo de c贸mo se crear铆a un registro con esta relaci贸n:

Dando como resultado lo siguiente:

JPA OneToOne payments table
Tabla payments
JPA OneToOne invoices table
Tabla invoices

Conclusiones

Crear relaciones OneToOne es muy simple como hemos podido comprobar, e incluso, podr铆amos crear una relaci贸n unidireccionar omitiendo la propiedad payment de la entidad Invoice, lo que diera como resultado exactamente la misma estructura de base de datos, con la 煤nica limitante que no podr铆amos recuperar el pago por medio de la factura y es por ello que utilizamos relacionar bidireccionales con mappedBy.

Anterior脥ndiceSiguiente

Deja un comentario

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