Embeber llave primaria con @EmbeddedId

Tutorial de JPAOtra manera de definir llaves primarías compuestas es con la Enumeración @EmbeddedId, la cual permite marcar una clase como ID. A diferencia de @IdClass, este método no requiere definir los atriburos de la llave primaria en la entidad, sino que solo hace falta agregar como atributo la clase que contiene todos los campos.

Una diferencia que tiene este método con respecto al @IdClass, es qué es necesario que la clase ID esta anotada a nivel de clase con la anotación @Embeddable. Esto le dice a JPA que esta clase se puede embeber dentro de otra.

 

Vamos a retomar la entidad Telephone y la clase TelephonePK y las modificaremos que en lugar de usar @Id, utilice @EmbeddedId. Modificaremos la clase TelephonePK y quedaría de la siguiente manera:

Observemos primero que nada que se le agrego la anotación @Embeddable a nivel de clase y los método equals y hashCode continuan definidos.

 

En segundo lugar, modificaremos la entidad Telephone y quedaría de la siguiente manera:

Primero que nada, observemos que hemos retirado las propiedades employeeId y telType para ser sustituido por la case TelephonePK, a la cual le agregamos la anotación @EmbeddedId.

La anotación @EmbeddedId provocara que los campos definidos en la clase TelephonePK sean considerados como si fueran parte de la clase Telephone.

 

Cabe mencionar que tanto @IdClass como @EmbeddedId darán el mismo resultado en tiempo de ejecución, por lo que la única diferencia es solo a nivel del código. Recordemos que con @IdClass es necesario definir los campo que serán la llave primaria tanto en la Entidad como en las clases Id, en cambio, con @EmbeddedId solo será necesario embeber la llave como una propiedad más de la case. Particularmente yo prefiero trabajar con @EmbeddedId para evitar repetir atributos.

 

Finalmente veamos cómo quedaría la tabla generada por JPA, la cual es igual en estructura a la tabla generada utilizando @IdClass que vimos en la sección anterior:

Tabla con @EmbeddedId

 

NOTA: Este artículo es solo una sección del Tutorial de JPA, para ver el contenido completo de este tutorial regresa al Índice en el botón de abajo.

 

AnteriorÍndiceSiguiente
 

Artículos relacionados

Como construir un API REST con NodeJS (Primera par... Hoy en día, es más notable la necesidad de construir API’s para nuestras aplicaciones, las cuales nos permitan integrar nuestras aplicaciones con otra...

Oscar Blancarte

Ideológico, Innovador y emprendedor, Padre, Tecnólogo y Autor, amante de la ciencia y la tecnología en todos sus colores y sabores. Arquitecto de software & Full Stack Developer con experiencia en la industria del desarrollo de software y la consultoría. Amante de la programación y el Ajedrez.

Deja un comentario

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