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 エンティティの柔軟性と独立性を維持することができました。このアプローチは、特に同様の特性を共有する複数のエンティティを含むシステムにおいて、よりクリーンでよりモジュール化された設計を促進します。
以上がJPA の @MappedSuperclass を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。