Comprendre le « côté propriétaire » dans le mappage ORM
Dans le mappage objet-relationnel (ORM), les relations bidirectionnelles entre entités nécessitent le concept de un "côté propriétaire" pour garantir un comportement correct de la base de données.
Définir le propriétaire Côté
Le côté propriétaire d'une relation bidirectionnelle fait référence à l'entité qui « possède » la contrainte de clé étrangère dans la base de données. Cela signifie que les mises à jour de la relation ne sont suivies et conservées que par le côté propriétaire.
Justification du côté propriétaire
Les bases de données relationnelles prennent intrinsèquement en charge les relations unidirectionnelles via des clés étrangères. Pour implémenter des relations bidirectionnelles, les ORM comme Hibernate créent des tables d'association supplémentaires ou maintiennent une table de jointure pour représenter la relation. Le concept de côté propriétaire garantit qu'un seul côté de la relation est suivi et mis à jour, évitant ainsi les incohérences potentielles des données.
Exemples de mappages
Un à plusieurs Relation :
@Entity public class Department { @OneToMany(mappedBy = "department") private List<Employee> employees; } @Entity public class Employee { @ManyToOne private Department department; }
Dans cet exemple, Department est le côté propriétaire car il possède le Department_id clé étrangère dans la table Employee. L'ajout ou la suppression d'un employé du champ département dans Département créera ou supprimera automatiquement la référence de clé étrangère dans la table Employé.
Relation individuelle :
@Entity public class Person { @OneToOne(mappedBy = "person") private Passport passport; } @Entity public class Passport { @OneToOne private Person person; }
Dans ce cas, le côté propriétaire n'est pas explicitement spécifié. Hibernate le déduit en fonction de l'ordre des annotations. La personne devient le côté propriétaire car elle apparaît en premier et possède la clé étrangère person_id dans la table Passport.
Relation plusieurs-à-un :
@Entity public class Cart { @OneToMany(mappedBy = "cart") private List<Product> products; } @Entity public class Product { @ManyToOne private Cart cart; }
Similaire à dans l'exemple One-to-Many, Cart est le côté propriétaire car il possède la clé étrangère cart_id dans le produit table.
Conclusion
Comprendre le concept de côté propriétaire est crucial pour gérer efficacement les relations bidirectionnelles dans les mappages ORM. Il garantit l’intégrité des données et évite les tables de base de données inutiles et la duplication de données. En sachant quel côté de la relation est le côté propriétaire, les développeurs peuvent éviter les incohérences et maintenir une représentation cohérente des données dans l'application et dans la base de données.
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!