JPA (Java Persistence API) は、Java クラスをデータベース テーブルにマッピングするためのいくつかのアノテーションを提供します。このような便利なアノテーションの 1 つは @MappedSuperclass です。これは、プロパティが他のエンティティ クラスによって継承される必要があるが、エンティティ自体ではないクラスを指定するために使用されます。 Vehicle、Car、Motorcycle などのクラスを含む実際の例を通じて、このアノテーションの有用性を探ってみましょう。
@MappedSuperclass とは何ですか?
@MappedSuperclass アノテーションは、クラスが独立したエンティティであってはならず、その属性がエンティティである他のクラスによって継承される必要があることを示すために使用されます。これは、基本クラス用に別のテーブルを作成せずに、複数のエンティティ間で共通の属性を共有したい場合に便利です。
主な機能:
実践例
Vehicle、Car、Motorcycle のクラス階層を持つ例を作成してみましょう。Vehicle がスーパークラスです。
1.基本クラス: 車両
import javax.persistence.MappedSuperclass; @MappedSuperclass public abstract class Veiculo { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String marca; private String modelo; private int ano; // Getters e Setters }
2.サブクラス: 車
import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "carro") public class Carro extends Veiculo { private int quantidadePortas; // Getters e Setters }
3.サブクラス: オートバイ
import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "motocicleta") public class Motocicleta extends Veiculo { private boolean temSidecar; // Getters e Setters }
テーブル マッピング
上記のクラスを使用して、JPA はデータベースに次のテーブルを作成します:
Vehicle クラスは単なるスーパークラスでありエンティティではないため、Vehicle テーブルはデータベースに存在しません。
使用の利点 @MappedSuperclass
考慮事項
スーパークラスもエンティティにする場合 (直接クエリなど)、@MappedSuperclass の代わりに @Inheritance 継承戦略を使用します。
@MappedSuperclass は、基本クラスを個別のエンティティとして永続化する必要はないが、そのプロパティが複数のエンティティに関連する状況に最適です。
結論
@MappedSuperclass アノテーションは、JPA で再利用可能なクラス階層を作成するための強力なツールです。上の例では、Vehicle の共通属性を一元化すると同時に、Car エンティティと Motorcycle エンティティの柔軟性と独立性を維持することができました。このアプローチは、特に同様の特性を共有する複数のエンティティを含むシステムにおいて、よりクリーンでよりモジュール化された設計を促進します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3