jpa
Tabelle pro konkreter Klassenvererbungsstrategie
Suche…
Bemerkungen
- Fahrzeug, Transportfahrzeug und Passagierfahrzeug sind abstrakte Klassen und haben keine separate Tabelle in der Datenbank.
- Truck, Car und Bike sind konkrete Klassen, daher werden sie entsprechenden Tabellen zugeordnet. Diese Tabellen sollten alle Felder für mit @MappedSuperClass annotierte Klassen enthalten, da sie keine entsprechenden Tabellen in der Datenbank haben.
- Die Truck-Tabelle enthält Spalten, um Felder zu speichern, die von TransportationVehicle und Vehicle geerbt wurden.
- Auf ähnliche Weise verfügen Auto und Fahrrad über Spalten, um Felder zu speichern, die von Passagierfahrzeug und Fahrzeug geerbt wurden.
Ein vollständiges Beispiel finden Sie hier
Tabelle pro konkreter Klassenvererbungsstrategie
Wir werden ein Beispiel für die Fahrzeughierarchie nehmen, wie unten dargestellt.
Fahrzeug.java
package com.thejavageek.jpa.entities;
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.TableGenerator;
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
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;
}
}
TransportationVehilcle.java
package 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;
}
}
Truck.java
package com.thejavageek.jpa.entities;
import javax.persistence.Entity;
@Entity
public class Truck extends TransportationVehicle {
private int noOfContainers;
public int getNoOfContainers() {
return noOfContainers;
}
public void setNoOfContainers(int noOfContainers) {
this.noOfContainers = noOfContainers;
}
}
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;
}
}
Car.java
package com.thejavageek.jpa.entities;
import javax.persistence.Entity;
@Entity
public class Car extends PassengerVehicle {
private int noOfDoors;
public int getNoOfDoors() {
return noOfDoors;
}
public void setNoOfDoors(int noOfDoors) {
this.noOfDoors = noOfDoors;
}
}
Bike.java
package com.thejavageek.jpa.entities;
import javax.persistence.Entity;
@Entity
public class Bike extends PassengerVehicle {
private int saddleHeight;
public int getSaddleHeight() {
return saddleHeight;
}
public void setSaddleHeight(int saddleHeight) {
this.saddleHeight = saddleHeight;
}
}
Die Datenbankdarstellung wird wie folgt sein
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow