Lors de la création d'une API backend, il est courant de travailler avec des relations d'entité pour organiser les données. Généralement, dans les cours ou les tutoriels, nous constatons principalement des relations bidirectionnelles. Mais que se passe-t-il si vous souhaitez qu’une entité existe indépendamment de l’autre ? Dans cet article, nous explorerons comment utiliser une relation unidirectionnelle avec JPA/Hibernate pour y parvenir.
Imaginez que vous ayez deux entités : Student et ThesisSchedule. La relation entre Student et ThesisSchedule est « plusieurs-à-un », ce qui signifie qu'un étudiant peut être associé à un emploi du temps de thèse, et chaque emploi du temps peut inclure plusieurs étudiants.
Dans ce cas, notre objectif est de permettre la création d'un Étudiant sans nécessiter la définition préalable d'un ThesisSchedule. Cette indépendance est utile, par exemple, lors de l'ajout d'étudiants à la base de données avant de créer des plannings de thèse.
Nous allons créer des classes Student et ThesisSchedule en utilisant une relation unidirectionnelle « plusieurs-à-un » de Student à ThesisSchedule.
Code entité étudiant :
Code de l'entité ThesisShedule :
Ici, nous avons une relation unidirectionnelle de Student à ThesisSchedule, indiquée par l'annotation @ManyToOne dans la classe Student. En spécifiant nullable = true, nous permettons à un Student d'être créé sans nécessairement être associé à un ThesisSchedule.
Voyons comment cette configuration se traduit dans la base de données et comment les données peuvent être enregistrées via une API.
Avec cette configuration, nous pouvons créer un étudiant sans fournir de ThesisSchedule.
Demande POST de création d'un Étudiant (sans ThesisSchedule) :
Cela crée une nouvelle entrée dans la table Student avec une valeur nulle pour la colonne thesis_schedule_id.
Résultat :
Une fois qu'un ThesisSchedule est créé, nous pouvons mettre à jour le dossier de l'étudiant pour y associer.
Création d'un calendrier de thèse :
Ce ThesisSchedule nouvellement créé pourrait avoir un identifiant de 1.
Mise à jour de l'étudiant avec ThesisSchedule :
Résultat :
Maintenant, Larose est associé au ThesisSchedule nouvellement créé.
Dans certains cas, il peut être plus approprié de gérer la relation du côté de ThesisSchedule. Cette approche est utile si nous souhaitons que le planning de thèse gère ses étudiants associés, en gardant une trace de ceux qui participent à un planning spécifique.
Dans cette configuration, ThesisSchedule contient une collection de Student pour représenter une relation « un-à-plusieurs », tandis que Student ne conserve pas de référence à ThesisSchedule.
Code de l'entité ThesisSchedule :
Code entité étudiant :
Dans cette configuration, ThesisSchedule contient une liste d'étudiants via l'annotation @OneToMany. Par conséquent, les étudiants peuvent être ajoutés ou supprimés de ThesisSchedule sans nécessiter un lien direct dans Student.
En conclusion, la gestion de la relation côté Student ou ThesisSchedule dépend des besoins spécifiques de votre candidature :
Les deux configurations offrent de la flexibilité et permettent des API backend bien organisées en fonction des relations de données souhaitées. En appliquant les meilleures pratiques pour structurer les relations entre entités, vous pouvez modéliser efficacement votre base de données pour répondre aux besoins spécifiques de votre application.
Les relations unidirectionnelles sont une option puissante pour gérer les dépendances facultatives entre les entités dans une API backend.
J'espère que cette solution aidera d'autres développeurs à mieux comprendre et utiliser les relations unidirectionnelles dans JPA/Hibernate.
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!