JPAの継承関係のマッピング
🖊 オブジェクト中心のデザインと表中心のデザインの違い
🖊 スーパータイプのサブタイプ関係を物理モデルに具体化するポリシー
戦略に署名
(1)表をスーパータイプとサブタイプで別々に配置する
(2)スーパータイプテーブルにサブタイプテーブルの情報を追加する(DTYPE).
(3)サブタイプテーブルの情報を取得する場合は,(2)の情報に結合してデータを取得する.
利点:正規化.外部キー参照整合性制約によるストレージスペースの最適化
欠点:クエリー時にクエリーが複雑で、結合を多く使用する(比較性能↓)
単一テーブルポリシー
(1)1つのテーブルにすべての継承関係を入れます.
(2)サブタイプ情報が分かる情報(DTYPE)を追加する.
利点:クエリーが簡単で速い.
欠点:サブエンティティマッピングのすべてのカラムがNULLを許可し、状況に応じてパフォーマンス↓
実装クラスごとのテーブルポリシー
(1)実装クラスに格納されている情報に基づいてそれぞれテーブルを作成する.
使用しないポリシー
🖊 実際のコードの例
@Entity
@Inheritance(strategy = InheritanceType.~)
@DiscriminatorColumn //DTYPE
public class Parent{
...
}
@Entity
@DiscriminatorColumn
public class Child extends Parent{
...
}
...
Child child = new Child();
child.set(...);
em.persist(child);
...
🖊 Mapped Superclass
중복되는 속성을 모아놓은 클래스에 @MappedSuperClass를 달아두고
사용할 클래스에서 상속받아놓으면 간단하게 중복코드를 줄일 수 있다.
이 클래스는 Entity가 아니고 매핑 정보만 제공할 뿐이다.
따라서 이 클래스를 직접 사용 할 일이 없으므로 추상 클래스로 만들어두는 게 권장된다.
Reference
この問題について(JPAの継承関係のマッピング), 我々は、より多くの情報をここで見つけました https://velog.io/@cherish8513/JPA의-상속-관계-매핑テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol