수색…


매개 변수

주석 목적
@계승 사용 된 상속 전략 유형을 지정합니다.
@ DiscriminatorColumn 각 엔터티에 할당 된 특정 ID를 기반으로 다른 엔터티를 식별하는 데 사용할 데이터베이스의 열을 지정합니다.
@MappedSuperClass 매핑 된 수퍼 클래스는 지속되지 않으며 하위 클래스의 상태를 유지하는 데만 사용됩니다. 일반적으로 추상 자바 클래스는 @MapperSuperClass로 표시됩니다.

조인 된 상속 전략

JPA 구현을 기반으로하는 샘플 클래스 다이어그램. 여기에 이미지 설명을 입력하십시오.

@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

}

테스트 코드

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

데이터베이스 다이어그램은 다음과 같습니다. 여기에 이미지 설명을 입력하십시오.

합친 상속 전략의 장점은 단일 테이블 전략처럼 데이터베이스 공간을 낭비하지 않는다는 것입니다. 반면, 모든 삽입 및 검색에 관련된 여러 조인으로 인해 상속 계층이 넓고 깊어 질 때 성능이 문제가됩니다.

설명이 포함 된 전체 예제는 여기에서 읽을 수 있습니다 .



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow