JPA (Java Persistence API) fournit plusieurs annotations pour mapper les classes Java aux tables de base de données. Une de ces annotations utiles est @MappedSuperclass, qui est utilisée pour désigner une classe dont les propriétés doivent être héritées par d'autres classes d'entités, mais qui n'est pas une entité elle-même. Explorons l'utilité de cette annotation à travers un exemple pratique impliquant des classes telles que Véhicule, Voiture et Moto.
Qu'est-ce que @MapedSuperclass ?
L'annotation @MappedSuperclass est utilisée pour indiquer qu'une classe ne doit pas être une entité indépendante, mais que ses attributs doivent être hérités par d'autres classes qui sont des entités. Ceci est utile lorsque vous souhaitez partager des attributs communs entre plusieurs entités sans créer une table distincte pour la classe de base.
Caractéristiques principales :
Exemple pratique
Créons un exemple avec une hiérarchie de classes pour Véhicule, Voiture et Moto, où Véhicule est la superclasse.
1. Classe de base : Véhicule
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. Sous-classe : Voiture
import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "carro") public class Carro extends Veiculo { private int quantidadePortas; // Getters e Setters }
3. Sous-classe : Moto
import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "motocicleta") public class Motocicleta extends Veiculo { private boolean temSidecar; // Getters e Setters }
Mappage des tables
Avec les classes ci-dessus, JPA créera les tables suivantes dans la base de données :
La table Vehicle n'existe pas dans la base de données, car la classe Vehicle n'est qu'une superclasse et non une entité.
Avantages de l'utilisation @MappedSuperclass
Considérations
Si vous souhaitez que la superclasse soit également une entité (par exemple pour les requêtes directes), utilisez la stratégie d'héritage @Inheritance au lieu de @MappedSuperclass.
@MappedSuperclass est idéal pour les situations où la classe de base n'a pas besoin d'être conservée en tant qu'entité individuelle, mais où ses propriétés sont pertinentes pour plusieurs entités.
Conclusion
L'annotation @MappedSuperclass est un outil puissant pour créer des hiérarchies de classes réutilisables dans JPA. Dans l’exemple ci-dessus, nous avons pu centraliser les attributs communs dans Véhicule et, en même temps, conserver la flexibilité et l’indépendance des entités Voiture et Moto. Cette approche favorise une conception plus propre et plus modulaire, en particulier dans les systèmes comportant plusieurs entités partageant des caractéristiques similaires.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!