jpa
Strategie voor overerving van een enkele tabel
Zoeken…
parameters
| aantekening | Doel |
|---|---|
| @Erfenis | Geeft het gebruikte type overervingsstrategie aan |
| @DiscriminatorColumn | Geeft een kolom in de database aan die zal worden gebruikt om verschillende entiteiten te identificeren op basis van een bepaald ID dat aan elke entiteit is toegewezen |
| @MappedSuperClass | toegewezen superklassen zijn niet persistent en worden alleen gebruikt om status te behouden voor de subklassen. Over het algemeen worden abstracte Java-klassen gemarkeerd met @MapperSuperClass |
| @DiscriminatorValue | Een waarde opgegeven in kolom gedefinieerd door @DiscriminatorColumn. Deze waarde helpt het type entiteit te identificeren |
Opmerkingen
Het voordeel van een enkele tabelstrategie is dat er geen complexe joins nodig zijn voor het ophalen en invoegen van entiteiten, maar anderzijds verspilt het databaseruimte omdat veel kolommen op nul gezet moeten worden en er geen gegevens voor zijn.
Een volledig voorbeeld en artikel vindt u hier
Overnamestrategie voor één tafel
Een eenvoudig voorbeeld van voertuighiërarchie kan worden genomen voor de overervingstrategie van een enkele tabel.
Abstracte voertuigklasse:
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- pakket com.thejavageek.jpa.entities;
javax.persistence.MappedSuperclass importeren;
@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;
}
}
Test code:
/* 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow
