jpa
Tabel per overervingsstrategie van de concrete klasse
Zoeken…
Opmerkingen
- Voertuig, transportvoertuig en passagiersvoertuig zijn abstracte klassen en hebben geen aparte tabel in de database.
- Truck, Car en Bike zijn concrete klassen, zodat ze worden toegewezen aan bijbehorende tabellen. Deze tabellen moeten alle velden bevatten voor klassen die zijn geannoteerd met @MappedSuperClass omdat ze geen overeenkomstige tabellen in de database hebben.
- De Truck-tabel bevat dus kolommen om velden op te slaan die zijn overgenomen van TransportationVehicle en Vehicle.
- Evenzo zullen Auto en Fiets kolommen bevatten om velden over te nemen die zijn geërfd van PassengerVehicle en Vehicle.
Volledige voorbeeld is te vinden hier
Tabel per overervingsstrategie van de concrete klasse
We nemen een voorbeeld van een voertuighiërarchie zoals hieronder afgebeeld.
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;
}
}
De weergave van de database is zoals hieronder
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow