jpa
Verbundene Vererbungsstrategie
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 |
Verbundene Vererbungsstrategie
Ein Beispielklassendiagramm, auf dessen Grundlage die JPA-Implementierung angezeigt wird.
@Entity
@Table(name = "VEHICLE")
@Inheritance(strategy = InheritanceType.JOINED)
@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;
// getters and setters
}
TransportationVehicle.java
@MappedSuperclass
public abstract class TransportationVehicle extends Vehicle {
private int loadCapacity;
// getters and setters
}
Truck.java
@Entity
public class Truck extends TransportationVehicle {
private int noOfContainers;
// getters and setters
}
PassengerVehicle.java
@MappedSuperclass
public abstract class PassengerVehicle extends Vehicle {
private int noOfpassengers;
// getters and setters
}
Car.java
@Entity
public class Car extends PassengerVehicle {
private int noOfDoors;
// getters and setters
}
Bike.java
@Entity
public class Bike extends PassengerVehicle {
private int saddleHeight;
// getters and setters
}
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 aventador = new Car();
aventador.setManufacturer("lamborghini");
aventador.setNoOfDoors(2);
aventador.setNoOfpassengers(2);
em.persist(aventador);
Truck truck = new Truck();
truck.setLoadCapacity(1000);
truck.setManufacturer("volvo");
truck.setNoOfContainers(2);
em.persist(truck);
transaction.commit();
Datenbankdiagramm wäre wie folgt.
Der Vorteil der Strategie der verknüpften Vererbung besteht darin, dass sie keinen Datenbankspeicherplatz verschwendet wie bei einer Einzeltabellenstrategie. Auf der anderen Seite wird die Leistung aufgrund mehrerer Verknüpfungen für jedes Einfügen und Abrufen zu einem Problem, wenn Vererbungshierarchien groß und tief werden.
Vollständiges Beispiel mit Erklärung kann hier gelesen werden
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow