IT TIP

JPA : 모델 계층 구조 구현-@MappedSuperclass 대 @Inheritance

itqueen 2020. 12. 14. 21:25
반응형

JPA : 모델 계층 구조 구현-@MappedSuperclass 대 @Inheritance


Play Framework 1.2.4를 PostgreSQLJPA. 모델 계층 구조를 갖고 있으며이를 수행하는 몇 가지 대안이 있는지 확인하고 싶습니다.

기본 클래스 (추상적 임)와이 기본 클래스를 확장하는 두 개의 구체적인 클래스가 있습니다. 구체적인 클래스를 갖고 싶은 동안이 기본 클래스를 유지하고 싶지 않습니다. 기본 클래스에는 다른 Model 클래스가 속성으로 있습니다. 즉, @ManyToOne기본 클래스에 관계가 있습니다.

내 질문은 이것을 구현하는 가장 좋은 방법은 무엇입니까? 사용 @MappedSuperclass또는 @InheritanceTABLE_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.

참고 URL : https://stackoverflow.com/questions/9667703/jpa-implementing-model-hierarchy-mappedsuperclass-vs-inheritance

반응형