JPA : 모델 계층 구조 구현-@MappedSuperclass 대 @Inheritance
Play Framework 1.2.4를 PostgreSQL및 JPA. 모델 계층 구조를 갖고 있으며이를 수행하는 몇 가지 대안이 있는지 확인하고 싶습니다.
기본 클래스 (추상적 임)와이 기본 클래스를 확장하는 두 개의 구체적인 클래스가 있습니다. 구체적인 클래스를 갖고 싶은 동안이 기본 클래스를 유지하고 싶지 않습니다. 기본 클래스에는 다른 Model 클래스가 속성으로 있습니다. 즉, @ManyToOne기본 클래스에 관계가 있습니다.
내 질문은 이것을 구현하는 가장 좋은 방법은 무엇입니까? 사용 @MappedSuperclass또는 @Inheritance과 TABLE_PER_CLASS전략? 나는 그들이 거의 동등 해 보이기 때문에 약간 혼란 스럽습니다 .
또한 앞으로 직면 할 수있는 쿼리 및 성능 문제에 대한 우려도 있습니다.
MappedSuperClass는 속성, 연결 및 메서드를 상속하는 데 사용해야합니다.
엔터티 및 여러 하위 엔터티가있는 경우 엔터티 상속을 사용해야합니다.
다음 질문에 답하여 둘 중 하나가 필요한지 알 수 있습니다. 모델에 기본 클래스와 연관 될 수있는 다른 엔티티가 있습니까?
그렇다면 기본 클래스는 실제로 엔티티이며 엔티티 상속을 사용해야합니다. 그렇지 않은 경우 기본 클래스는 실제로 관련되지 않은 여러 엔터티에 공통적 인 속성 및 메서드를 포함하는 클래스이며 매핑 된 수퍼 클래스를 사용해야합니다.
예를 들면 :
- SMS 메시지, 이메일 메시지 또는 전화 메시지와 같은 여러 종류의 메시지가있을 수 있습니다. 그리고 사람에게는 메시지 목록이 있습니다. 메시지 종류에 관계없이 미리 알림을 메시지에 연결할 수도 있습니다. 이 경우 Message는 분명히 엔터티이며 엔터티 상속을 사용해야합니다.
- 모든 도메인 개체에는 생성 날짜, 수정 날짜 및 ID가있을 수 있으므로 기본 AbstractDomainObject 클래스에서 상속하도록 만들 수 있습니다. 그러나 어떤 엔티티도 AbstractDomainObject에 연결되지 않습니다. 항상 고객, 회사 등보다 구체적인 개체와 연결됩니다. 이 경우 MappedSuperClass를 사용하는 것이 좋습니다.
나는에서 설명하고있는 바와 같이 이 문서 , @MappedSupperclass댄 다른 @Inheritance주석.
@MappedSuperclassJPA 공급자에게로 주석이 추가 된 수퍼 클래스를 확장하는 자식 클래스에서 선언 한 것처럼 기본 클래스 영구 속성을 포함하도록 지시합니다 @MappedSuperclass.
그러나 데이터베이스 관점에서 기본 클래스가 표시되지 않기 때문에 상속은 OOP 세계에서만 볼 수 있습니다. 하위 클래스 엔터티에만 연결된 매핑 된 테이블이 있습니다.
@Inheritance주석은 데이터베이스 테이블 구조의 OOP의 상속 모델을 실현하기위한 것입니다. 또한으로 주석이 달린 기본 클래스를 쿼리 할 수 @Inheritance있지만 주석이 달린 기본 클래스에 대해서는 그렇게 할 수 없습니다 @MappedSuperclass.
이제 @InheritanceJPA 주석 을 사용하려는 이유 는 Strategy Pattern과 같은 동작 기반 패턴을 구현하기위한 것 입니다.
반면 @MappedSuperclass에은 (는) 기본 속성, 연결 및 @Id공통 기본 클래스를 사용하는 엔터티 를 모두 재사용하는 방법 일뿐 입니다. 그럼에도 불구하고 @Embeddable유형을 사용하여 거의 동일한 목표를 달성 할 수 있습니다 . 유일한 주요 차이점은를 사용하여 @Id정의를 재사용 @Embeddable할 수는 없지만 @MappedSuperclass.
'IT TIP' 카테고리의 다른 글
| C ++에서 c_str 함수의 사용은 무엇입니까 (0) | 2020.12.14 |
|---|---|
| node.js에서 내 스크립트가 직접 실행되고 있는지 또는 다른 스크립트에 의해로드되고 있는지 알 수 있습니까? (0) | 2020.12.14 |
| WAS (Windows Process Activation Service)에서 응용 프로그램 풀을 제공하기 위해 작업자 프로세스를 시작할 때 오류가 발생했습니다. (0) | 2020.12.14 |
| 함수에 매개 변수로 전달하지 않고 Spring에서 현재 사용자 로케일을 얻는 방법은 무엇입니까? (0) | 2020.12.14 |
| 벡터의 값을 기반으로 데이터 프레임에서 행 선택 (0) | 2020.12.14 |