Heim > Java > javaLernprogramm > Hauptteil

@MappedSuperclass in JPA verstehen

PHPz
Freigeben: 2024-08-25 18:00:36
Original
967 Leute haben es durchsucht

Entendendo @MappedSuperclass em JPA

JPA (Java Persistence API) bietet verschiedene Annotationen zum Zuordnen von Java-Klassen zu Datenbanktabellen. Eine solche nützliche Annotation ist @MappedSuperclass, die zur Bezeichnung einer Klasse verwendet wird, deren Eigenschaften von anderen Entitätsklassen geerbt werden müssen, die aber selbst keine Entität ist. Lassen Sie uns die Nützlichkeit dieser Anmerkung anhand eines praktischen Beispiels untersuchen, das Klassen wie Fahrzeug, Auto und Motorrad umfasst.

Was ist @MappedSuperclass?

Die Annotation @MappedSuperclass wird verwendet, um anzugeben, dass eine Klasse keine unabhängige Entität sein sollte, sondern dass ihre Attribute von anderen Klassen, die Entitäten sind, geerbt werden sollten. Dies ist nützlich, wenn Sie gemeinsame Attribute zwischen mehreren Entitäten teilen möchten, ohne eine separate Tabelle für die Basisklasse zu erstellen.

Hauptmerkmale:

  1. - Die mit @MappedSuperclass annotierte Klasse ist keine Entität.
  2. - Es ist nicht möglich, Abfragen direkt in der Klasse @MappedSuperclass auszuführen.
  3. - Unterklassen, die die Klasse @MappedSuperclass erweitern, werden einzelnen Tabellen in der Datenbank zugeordnet, erben jedoch Felder von der Basisklasse.

Praxisbeispiel

Erstellen wir ein Beispiel mit einer Klassenhierarchie für Fahrzeug, Auto und Motorrad, wobei Fahrzeug die Oberklasse ist.

1. Basisklasse: Fahrzeug

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

}
Nach dem Login kopieren
e
  • Die Fahrzeugklasse ist mit @MappedSuperclass.
  • annotiert
  • Die Fahrzeugklasse verfügt über das ID-Feld, das mit @id und @GeneratedValue versehen ist. Diese eindeutige Kennung wird von allen Unterklassen geerbt, wodurch sichergestellt wird, dass jede von Vehicle abgeleitete Entität über ein ID-Feld verfügt.
  • Es definiert drei gemeinsame Attribute: Marke, Modell und Jahr.

2. Unterklasse: Auto

import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name = "carro")
public class Carro extends Veiculo {

    private int quantidadePortas;

    // Getters e Setters

}
Nach dem Login kopieren
e
  • Die Car-Klasse erbt die Attribute der Vehicle-Klasse.
  • Es wird mit @Entity annotiert und einer Tabelle namens car.
  • zugeordnet

3. Unterklasse: Motorrad

import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name = "motocicleta")
public class Motocicleta extends Veiculo {

    private boolean temSidecar;

    // Getters e Setters
}
Nach dem Login kopieren
e
  • Die Motorradklasse erbt auch die Attribute der Fahrzeugklasse.
  • Es wird mit @Entity annotiert und einer Tabelle namens „Motorrad“ zugeordnet.

Tabellenzuordnung

Mit den oben genannten Klassen erstellt JPA die folgenden Tabellen in der Datenbank:

  1. Autotabelle: Enthält Spalten für Marke, Modell, Jahr und Anzahl der Türen.
  2. Tabelle Motorrad: Enthält Spalten für Marke, Modell, Jahr und temSidecar.

Die Fahrzeugtabelle existiert nicht in der Datenbank, da die Fahrzeugklasse nur eine Oberklasse und keine Entität ist.

Vorteile der Verwendung @MappedSuperclass

  • Identifier-Zentralisierung: Das ID-Feld wird in der Superklasse verwaltet. Alle von Fahrzeug abgeleiteten Entitäten nutzen dasselbe Identifikationsschema.
  • Code-Wiederverwendung: Gemeinsame Attribute können in einer Oberklasse zentralisiert werden, wodurch Duplikate in Unterklassen vermieden werden.
  • Einfache Wartung: Änderungen an allgemeinen Attributen können an einem Ort vorgenommen werden.
  • Kohäsives Datenmodell: Unterklassen haben dieselbe Struktur, wodurch das Modell einfacher zu manipulieren und zu verstehen ist.

Überlegungen

Wenn Sie möchten, dass die Superklasse auch eine Entität ist (z. B. für direkte Abfragen), verwenden Sie die Vererbungsstrategie @Inheritance anstelle von @MappedSuperclass.
@MappedSuperclass ist ideal für Situationen, in denen die Basisklasse nicht als einzelne Entität beibehalten werden muss, ihre Eigenschaften jedoch für mehrere Entitäten relevant sind.

Fazit

Die Annotation @MappedSuperclass ist ein leistungsstarkes Tool zum Erstellen wiederverwendbarer Klassenhierarchien in JPA. Im obigen Beispiel ist es uns gelungen, die gemeinsamen Attribute im Fahrzeug zu zentralisieren und gleichzeitig die Flexibilität und Unabhängigkeit der Einheiten „Auto“ und „Motorrad“ aufrechtzuerhalten. Dieser Ansatz fördert ein saubereres, modulareres Design, insbesondere in Systemen mit mehreren Einheiten, die ähnliche Eigenschaften aufweisen.

Das obige ist der detaillierte Inhalt von@MappedSuperclass in JPA verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!