Relaciones @One-to-One (JPA)

En este artículo vamos a hablar sobre JPA, concretamente sobre las relaciones @OneToOne. Este tipo de relaciones, se caracterizan por referenciar una entidad A con una entidad B. En nuestro caso, la tabla Empleados con la tabla Departamentos.

¿PARA QUE HACEMOS ESTO?

La finalidad de combinar ambas entidades es que a cuando hagamos una petición a un end point, podamos utilizar dichas relaciones para mostrar la información de ambas tablas en una respuesta dicha petición. En este caso en concreto, que cada petición a un Employee contenga el Departament al que pertenece.

SISTEMA MANJEADOR DE BASES DE DATOS (SGBD)

El motor de BBDD sobre el que trabajaremos será MySQL WorkBech.

DIAGRAMA DE LA BBDD

SCRIPT BBDD:

SELECT * DE LAS TABLAS

CREANDO EL PROYECTO

Las dependencias que usaremos serán:

APPLICATION.PROPERTIES

ESTRUCTURA DEL PROYECTO

Aunque lo correcto sería añadir una capa de Controlador que por dentro llamará a la capa de Servicio que será la que manejará la inteligencia la lógica de negocio. Y finalmente, el servicio será el que bajará a la capa de Repositorio. Pero en este caso, y para reducir el código, vamos a trabajar únicamente con el controlador y con el repositorio.

+---src

|   +---main

    |   +---java

    |   |   ---com

    |   |       ---example

    |   |           |   OneToOneApplication.java

    |   |           |

    |   |           +---controller

    |   |           |       DepartamentController.java

    |   |           |       EmployeeController.java

    |   |           |

    |   |           +---entity

    |   |           |       Departament.java

    |   |           |       DepartamentRest.java

    |   |           |       Employee.java

    |   |           |       EmployeeRest.java

    |   |           |

    |   |           ---repository

    |   |                   DepartamentRepository.java

    |   |                   EmployeeRepository.java

    |   |

    |   ---resources

    |       |   application.properties

CONTROLLERS

REPOSITORIES

DepartamentRepository:

EmployeeRepository:

ENTITIES

Aunque tenéis el código de las entidades de ejemplo lo tenéis más abajo, no soy tan malo de haceros copiarlo a mano, vamos a ver el una imagen para analizar/entender realmente lo que estamos haciendo:

Departament:

Employee:

RESULT 1

Si nos paramos a mirar el resultado podemos comprobar como ahora sí que cada trabajador tiene su departamento. Pero ¿Qué pasaría si solamente queremos mostrar el nombre del departamento sin el resto de contenido? La respuesta será que tendremos que crear un objeto con los 3 campos (los 2 que queremos conservar y el campo nuevo) y mapear el objeto anterior. Vamos a ver un ejemplo:

EMPLOYEEREST

EMPLOYEECONTROLLER

Y tendremos que modificar el controlador:

La finalidad de esta modificación será el transformar/mapear el objeto Employee a EmployeeRest. Para ello primeramente creamos un for Each de la lista anterior y dentro del bucle añadimos un objeto de tipo Rest que tiene el campo departament sobre el que volvaremos la información del objeto y finalmente ne cada iteracción guardaremos el nuevo objeto EmployeeRest en una lista de EmployeeRest.

RESULT 2

AÑADIENDO LAMBDAS AL EMPLOYEECONTROLLER

Para los más puristas, como ya hemos visto expresiones Lambda, os dejo una ejemplo por aquí:

RESULT 3

Y como podéis observar, obtendremos el mismo resultado:

DEPARAMENT CON LISTA DE EMPLOYEES DENTRO

Vamos a darle la vuelta a la tortilla imaginaros que queremos mostrar todos los departamentos y dentro mostrar los nombres de los trabajadores. Para ello:

ENTITY DEPARTAMENTREST

DEPARTAMENT CONTROLLER

RESULT 4

Bueno, esto es todo por hoy, espero que os haya servido el artículo. ¡Un saludo javer@s!

6 comentarios

  1. Excelente ejemplo, totalmente entendible!! Gracias

  2. Excellent website. A lot of useful information here. I am sending it to some buddies ans additionally sharing in delicious.
    And naturally, thanks on your sweat!

  3. Woah! I’m really loving the template/theme of this blog.
    It’s simple, yet effective. A lot of times it’s tough to get
    that “perfect balance” between user friendliness and appearance.

    I must say you’ve done a amazing job with this. Also, the blog loads extremely quick for me
    on Opera. Superb Blog!

  4. Magnificent goods from you, man. I have understand your stuff previous to and you are just extremely wonderful.
    I really like what you’ve acquired here, certainly
    like what you’re stating and the way in which you say it.
    You make it enjoyable and you still take care of to keep it wise.
    I can not wait to read much more from you. This is really
    a terrific web site. quest bars http://bitly.com/3C2tkMR quest bars

  5. Hello there, You’ve done a fantastic job. I’ll certainly digg it and personally suggest to my friends.

    I’m confident they will be benefited from this site. scoliosis surgery https://coub.com/stories/962966-scoliosis-surgery scoliosis surgery

Deja una respuesta

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

La Ley 34/2002 nos obliga a avisarte de que usamos cookies propias y de terceros con objetivos estadísticos y de sesión y para mostrarte la 'publi' que nos da de comer. Tranquilo, este mensaje solo sale una vez. Más información

Java desde 0 comunica a los usuarios, a través de este aviso, que puede utilizar cookies cuando el usuario navega por las diferentes pantallas y páginas del sitio. Durante el uso de nuestra página Web usted acepta y autoriza expresamente el uso de cookies, de acuerdo con nuestra Política de Privacidad. Este sitio web utiliza las siguientes cookies propias: - Cookies de sesión, para garantizar que los usuarios que escriban comentarios en el blog sean humanos y no aplicaciones automatizadas. De esta forma se combate el spam. Este sitio web utiliza las siguientes cookies de terceros: - Google AdManager y AdSense: Utiliza cookies para mejorar la publicidad. Entre otros fines, suelen utilizarse para segmentarla según el contenido que sea relevante para los usuarios o su ubicación, mejorar los informes de rendimiento de las campañas y evitar mostrar anuncios que los usuarios ya hayan visto. Las cookies no contienen información personal identificable. Consulta cómo utiliza Google la información de sitios web o aplicaciones. y cómo bloquear determinados anuncios. - Google Analytics: Almacena cookies para poder elaborar estadísticas sobre el tráfico y volumen de visitas de esta web. Al utilizar este sitio web está consintiendo el tratamiento de información acerca de usted por Google. Por tanto, el ejercicio de cualquier derecho en este sentido deberá hacerlo comunicando directamente con Google. - Redes sociales: Cada red social utiliza sus propias cookies para que usted pueda pinchar en botones del tipo Me gusta o Compartir.

Cerrar