JPA (Java Persistence API) proporciona varias anotaciones para asignar clases Java a tablas de bases de datos. Una de esas anotaciones útiles es @MappedSuperclass, que se utiliza para designar una clase cuyas propiedades deben ser heredadas por otras clases de entidad, pero que no es una entidad en sí misma. Exploremos la utilidad de esta anotación a través de un ejemplo práctico que involucra clases como Vehículo, Auto y Motocicleta.
¿Qué es @MappedSuperclass?
La anotación @MappedSuperclass se usa para indicar que una clase no debe ser una entidad independiente, sino que sus atributos deben ser heredados por otras clases que son entidades. Esto es útil cuando desea compartir atributos comunes entre varias entidades sin crear una tabla separada para la clase base.
Características principales:
Ejemplo práctico
Creemos un ejemplo con una jerarquía de clases para Vehículo, Automóvil y Motocicleta, donde Vehículo es la superclase.
1. Clase base: Vehículo
import javax.persistence.MappedSuperclass; @MappedSuperclass public abstract class Veiculo { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String marca; private String modelo; private int ano; // Getters e Setters }
2. Subclase: Coche
import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "carro") public class Carro extends Veiculo { private int quantidadePortas; // Getters e Setters }
3. Subclase: Motocicleta
import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "motocicleta") public class Motocicleta extends Veiculo { private boolean temSidecar; // Getters e Setters }
Asignación de tablas
Con las clases anteriores, JPA creará las siguientes tablas en la base de datos:
La tabla Vehículo no existe en la base de datos, ya que la clase Vehículo es solo una superclase y no una entidad.
Beneficios de usar @MappedSuperclass
Consideraciones
Si desea que la superclase también sea una entidad (por ejemplo, para consultas directas), utilice la estrategia de herencia @Inheritance en lugar de @MappedSuperclass.
@MappedSuperclass es ideal para situaciones en las que no es necesario conservar la clase base como una entidad individual, pero sus propiedades son relevantes para múltiples entidades.
Conclusión
La anotación @MappedSuperclass es una poderosa herramienta para crear jerarquías de clases reutilizables en JPA. En el ejemplo anterior, logramos centralizar los atributos comunes en Vehículo y, al mismo tiempo, mantener la flexibilidad e independencia de las entidades Auto y Moto. Este enfoque promueve un diseño más limpio y modular, especialmente en sistemas con múltiples entidades que comparten características similares.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3