jpa
Strategie für die Vererbung einzelner Tabellen
Suche…
Parameter
| Anmerkung | Zweck |
|---|---|
| @Erbe | Gibt den Typ der verwendeten Vererbungsstrategie an |
| @DiscriminatorColumn | Gibt eine Spalte in der Datenbank an, die zur Identifizierung verschiedener Entitäten verwendet wird, basierend auf einer bestimmten Entität, die jeder Entität zugeordnet ist |
| @MappedSuperClass | Zugeordnete Superklassen sind nicht persistent und werden nur verwendet, um den Status für ihre Unterklassen aufrechtzuerhalten. Im Allgemeinen sind abstrakte Java-Klassen mit @MapperSuperClass gekennzeichnet |
| @DiscriminatorValue | Ein in einer von @DiscriminatorColumn definierten Spalte angegebener Wert. Dieser Wert hilft beim Identifizieren des Entitätstyps |
Bemerkungen
Der Vorteil der Single-Table-Strategie besteht darin, dass zum Abrufen und Einfügen von Entitäten keine komplexen Joins erforderlich sind. Andererseits wird Datenbankplatz verschwendet, da viele Spalten nullfähig sein müssen und keine Daten vorhanden sind.
Vollständiges Beispiel und Artikel finden Sie hier
Strategie zur Vererbung einzelner Tabellen
Ein einfaches Beispiel für die Fahrzeughierarchie kann für die Vererbungsstrategie für einzelne Tabellen verwendet werden.
Zusammenfassung Fahrzeugklasse:
package com.thejavageek.jpa.entities;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
@Entity
@Table(name = "VEHICLE")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "VEHICLE_TYPE")
public abstract class Vehicle {
@TableGenerator(name = "VEHICLE_GEN", table = "ID_GEN", pkColumnName = "GEN_NAME", valueColumnName = "GEN_VAL", allocationSize = 1)
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "VEHICLE_GEN")
private int idVehicle;
private String manufacturer;
public int getIdVehicle() {
return idVehicle;
}
public void setIdVehicle(int idVehicle) {
this.idVehicle = idVehicle;
}
public String getManufacturer() {
return manufacturer;
}
public void setManufacturer(String manufacturer) {
this.manufacturer = manufacturer;
}
}
TransportableVehicle.java Paket com.thejavageek.jpa.entities;
import javax.persistence.MappedSuperclass;
@MappedSuperclass
public abstract class TransportationVehicle extends Vehicle {
private int loadCapacity;
public int getLoadCapacity() {
return loadCapacity;
}
public void setLoadCapacity(int loadCapacity) {
this.loadCapacity = loadCapacity;
}
}
PassengerVehicle.java
package com.thejavageek.jpa.entities;
import javax.persistence.MappedSuperclass;
@MappedSuperclass
public abstract class PassengerVehicle extends Vehicle {
private int noOfpassengers;
public int getNoOfpassengers() {
return noOfpassengers;
}
public void setNoOfpassengers(int noOfpassengers) {
this.noOfpassengers = noOfpassengers;
}
}
Truck.java
package com.thejavageek.jpa.entities;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
@Entity
@DiscriminatorValue(value = "Truck")
public class Truck extends TransportationVehicle{
private int noOfContainers;
public int getNoOfContainers() {
return noOfContainers;
}
public void setNoOfContainers(int noOfContainers) {
this.noOfContainers = noOfContainers;
}
}
Bike.java
package com.thejavageek.jpa.entities;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
@Entity
@DiscriminatorValue(value = "Bike")
public class Bike extends PassengerVehicle {
private int saddleHeight;
public int getSaddleHeight() {
return saddleHeight;
}
public void setSaddleHeight(int saddleHeight) {
this.saddleHeight = saddleHeight;
}
}
Car.java
package com.thejavageek.jpa.entities;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
@Entity
@DiscriminatorValue(value = "Car")
public class Car extends PassengerVehicle {
private int noOfDoors;
public int getNoOfDoors() {
return noOfDoors;
}
public void setNoOfDoors(int noOfDoors) {
this.noOfDoors = noOfDoors;
}
}
Testcode:
/* Create EntityManagerFactory */
EntityManagerFactory emf = Persistence
.createEntityManagerFactory("AdvancedMapping");
/* Create EntityManager */
EntityManager em = emf.createEntityManager();
EntityTransaction transaction = em.getTransaction();
transaction.begin();
Bike cbr1000rr = new Bike();
cbr1000rr.setManufacturer("honda");
cbr1000rr.setNoOfpassengers(1);
cbr1000rr.setSaddleHeight(30);
em.persist(cbr1000rr);
Car avantador = new Car();
avantador.setManufacturer("lamborghini");
avantador.setNoOfDoors(2);
avantador.setNoOfpassengers(2);
em.persist(avantador);
Truck truck = new Truck();
truck.setLoadCapacity(100);
truck.setManufacturer("mercedes");
truck.setNoOfContainers(2);
em.persist(truck);
transaction.commit();
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow
