Sök…


parametrar

Anteckning Ändamål
@Arv Anger vilken typ av arvstrategi som används
@DiscriminatorColumn Anger en kolumn i databasen som kommer att användas för att identifiera olika enheter baserat på viss ID tilldelad varje enhet
@MappedSuperClass mappade superklasser är inte bestående och används bara för att hålla tillstånd för dess underklasser. Generellt sett är abstrakta java-klasser markerade med @MapperSuperClass

Gick med i arvstrategi

Ett provklassdiagram baserat på vilket vi kommer att se JPA-implementering. ange bildbeskrivning här

@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

}

Testkod

/* 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();

Databasdiagrammet skulle vara som nedan. ange bildbeskrivning här

Fördelen med sammanfogad arvstrategi är att den inte slösar databasutrymme som i en enda tabellstrategi. Å andra sidan, på grund av flera anslutningar som är involverade för varje införande och återhämtning, blir prestanda ett problem när arvshierarkier blir breda och djupa.

Fullständigt exempel med förklaring kan läsas här



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow