jpa
Lid geworden van de overervingsstrategie
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 |
Lid geworden overerving strategie
Een voorbeeld van een klassendiagram op basis waarvan we de JPA-implementatie zullen zien.
@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();
Databasediagram zou zijn zoals hieronder.
Het voordeel van samengevoegde overervingsstrategie is dat het geen databaseruimte verspilt, zoals bij een enkele tabelstrategie. Aan de andere kant worden prestaties een probleem wanneer overervinghiërarchieën breed en diep worden, omdat er meerdere joins zijn betrokken voor elke invoeging en ophalen.
Volledige voorbeeld met uitleg kan worden gelezen hier
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow