Llaves compuestas con @IdClass

Tutorial de JPA @IdClassExisten ocasiones en donde se requieres marcar más de un campo como @Id, conformando con esto una llave primaría compuesta. En estos casos se requiere complementar la entidad con una clase adicional que será utilizada como ID y además tendrá que ser referenciada desde la clase donde se requiere una llave compuesta.

La utilización de @IdClass es una de las dos opciones para definir llaves primarias compuestas, y esta consiste en crear una clase adicional únicamente con los campos que corresponden a la llave primaria.
Veamos un caso concreto, normalmente un empleado puede tener más de un teléfono, entonces, podríamos crear una tabla donde la llave primaria sea el ID del empleado y el tipo de teléfono, de esta forma nos aseguramos de tener solo un tipo de teléfono por empleado. Veamos cómo quedaría la clase ID:

Definimos la clase TelephonePK, la cual solamente tiene como atributos el tipo de teléfono y el id del empleado. Observemos que esta no requiere de ningún tipo de anotación, pero si es requerido sobrescribir los métodos hashCode & equals.
La siguiente clase que definimos es la Entidad Telephone la cual representa un teléfono de empleado.

Observemos que esta clase cuanta con el Id del empleado y el tipo de teléfono marcados como @Id, además, tiene la anotación @IdClass a nivel de clase y como valor tiene la clase EmployeePK.
Un dato importante es que tanto la definición de los atributos en la clase ID como en la clase Entidad deben de coincidir a la perfección en caso contrario provocara un error en tiempo de ejecución.

Tras aplicar estos últimos cambios la siguiente tabla será generada:

 

Tras aplicar estos últimos cambios, la siguiente tabla será generada:

Tabla con @IdClass

Observemos que la tabla contiene tanto los campos de la entidad Telephone como la clase id TelephonePK.
En lo particular, esté método para definir llaves primarías compuestas no me agrada mucho, debido a que me obliga a repetir los atributos en las dos clases. En la siguiente sección hablaremos del segundo método para implementar llaves compuestas utilizando la anotación @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

Definir llave primaría con @Id Al igual que en las tablas, las entidades también requieren un identificador( ), dicho identificador deberá de diferenciar a la entidad del resto. Com...
Mapeo de tablas con @Table En la sección hablaremos de la anotación   y su importancia a la hora de definir entidades. La anotación @Table es utilizada para indicarle a JPA cont...
JPA – Resource Local transaction Resource Local es un tipo de transaccionalidad que soporta JPA que delegar la responsabilidad de las transacciones al programador, de esta manera, el ...

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.

2 comentarios en “Llaves compuestas con @IdClass

Deja un comentario

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