MappedSuperclass は、フィールドとコードの再利用のために継承を使用します。たとえば、すべてのエンティティにLong id
とフィールドを持たせたい場合は、これらの 2 つのフィールドとゲッター、セッターなどを含むアノテーションが付けられLong version
たクラスを拡張することができます。しかし、関連付けを持つエンティティは決してありません。 BaseEntity の場合: 関連付けは常に BaseEntity の特定のサブクラスとなります。BaseEntity
MappedSuperclass
親エンティティは「エンティティ ポリモーフィズム」に使用されます。たとえば、Message
anEmailMessage
と aの 2 種類があると想像できますSmsMessage
。両方とも、ソース、ターゲット、およびボディを含みます。ただし、EmailMessage には電子メール アドレスと件名があり、SmsMessage には電話番号があります。
Person
また、タイプ の送信済みメッセージのコレクションを含むエンティティがあると想像できますMessage
。コレクションには、実際には EmailMessage と SmsMessage のインスタンスが含まれます。Hibernate は、継承マッピングに使用される継承戦略に応じて、インスタンス化するものを決定します。
- すべてのメッセージを同じテーブルに格納でき、Hibernate はメッセージのタイプを含む識別子列を使用します。
- EmailMessage を 1 つのテーブルに格納し、SmsMessage を別のテーブルに格納できます。
- または、両方のエンティティ (ソース、ターゲット、本文) に共通のフィールドを共通テーブルに格納し、EmailMessage に固有のフィールドを 2 番目のテーブルに格納し、SmsMessage に固有のフィールドを 3 番目のテーブルに格納します。