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. voer hier de afbeeldingsbeschrijving in

@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. voer hier de afbeeldingsbeschrijving in

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