jpa
Tabella per strategia di ereditarietà della classe concreta
Ricerca…
Osservazioni
- Vehicle, TransportationVehicle and PassengerVehicle sono classi astratte e non avranno una tabella separata nel database.
- Truck, Car and Bike sono classi concrete in modo che vengano mappate alle tabelle corrispondenti. Queste tabelle dovrebbero includere tutti i campi per le classi annotate con @MappedSuperClass perché non hanno tabelle corrispondenti nel database.
- Quindi, la tabella Truck avrà colonne per memorizzare i campi ereditati da TransportationVehicle e Vehicle.
- Allo stesso modo, Car and Bike avrà colonne per memorizzare i campi ereditati da Passenger Veicolo e Veicolo.
L'esempio completo può essere trovato qui
Tabella per strategia di ereditarietà della classe concreta
Prenderemo esempio di gerarchia del veicolo come illustrato di seguito.
Vehicle.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;
}
}
La rappresentazione del database sarà la seguente
Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow