"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Comprender @MappedSuperclass en JPA

Comprender @MappedSuperclass en JPA

Publicado el 2024-09-02
Navegar:320

Entendendo @MappedSuperclass em JPA

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:

  1. - La clase anotada con @MappedSuperclass no es una entidad.
  2. - No es posible ejecutar consultas directamente en la clase @MappedSuperclass.
  3. - Las subclases que extienden la clase @MappedSuperclass se asignan a tablas individuales en la base de datos, pero heredan campos de la clase base.

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

}
  • La clase Vehículo está anotada con @MappedSuperclass.
  • La clase Vehículo tiene el campo id anotado con @id y @GeneratedValue. Este identificador único será heredado por todas las subclases, lo que garantiza que cada entidad derivada de Vehículo tenga un campo de identificación.
  • Define tres atributos comunes: marca, modelo y año.

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

}
  • La clase Auto hereda los atributos de la clase Vehículo.
  • Está anotado con @Entity y asignado a una tabla llamada car.

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
}
  • La clase Motocicleta también hereda los atributos de la clase Vehículo.
  • Está anotado con @Entity y asignado a una tabla llamada motocicleta.

Asignación de tablas

Con las clases anteriores, JPA creará las siguientes tablas en la base de datos:

  1. Tabla carro: Contiene columnas para marca, modelo, año y cantidadPuertas.
  2. Tabla motocicleta: Contiene columnas para marca, modelo, año y TemSidecar.

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

  • Centralización de identificadores: el campo id se gestiona en la superclase. Todas las entidades derivadas de Vehículo comparten el mismo esquema de identificación.
  • Reutilización de código: los atributos comunes se pueden centralizar en una superclase, evitando la duplicación en subclases.
  • Facilidad de mantenimiento: los cambios en atributos comunes se pueden realizar en un solo lugar.
  • Modelo de datos cohesivo: las subclases comparten la misma estructura, lo que hace que el modelo sea más fácil de manipular y comprender.

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.

Declaración de liberación Este artículo se reproduce en: https://dev.to/gregoriohd/entendondo-mappedsuperclass-em-jpa-4310?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

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