Article faisant partie d’une série présentant les différentes annotations permettant de traduire des relations entre classes persistantes en bases de données relationnelles.
Nous allons voir maintenant une relation OneToOne unidirectionnelle entre une classe B et une classe C. Le lien se fera de B vers C.
Diagramme de classe
Code Java
Code de la classe B :
Nous avons un attribut de type ClasseC nous permettant d’accéder à un objet C depuis un objet B.
Le code la classe C :
Comme la relation est unidirectionnelle, nous n’avons pas d’attribut de type ClasseB dans C.
Les tables correspondantes
La table correspondant à la classe B :
La table correspondant à la classe C :
Et voici le script SQL permettant de générer les tables :
Script de la table B :
Script de la table C :
Cas d’une relation 1 —> 1
Dans le diagramme de classes précédent, nous avions une cardinalité de 1 —> 0,1 entre B et C, ce qui veut dire que l’on n’est pas obligé d’avoir un objet C pour chaque objet B créé. D’autre part, nous avons bien le champ C_ID_FK qui est défini avec la valeur NULL autorisée. Maintenant si nous désirons que pour tout B nous ayons un C correspondant, nous devrons interdire NULL sur la clé étrangère.
Pour cela, il suffit de modifier la classe B en précisant l’annotation suivante :
ce qui donne maintenant la table :
Et le script SQL correspondant :
Nous avons bien maintenant la définition de la clé étrangère qui a l’attribut NOT NULL.
Dans le cas précédent nous ne pouvions pas aller d’une instance de C vers B puisque la classe C ne disposait pas d’un attribut de type ClasseB.
Nous allons maintenant définir deux classes D et E de telle manière que nous puissions trouver E quand nous avons D mais aussi l’inverse.
Diagramme de classes
Le code Java
La classe D :
La classe E :
Peu de différence entre le code du lien unidirectionnel si ce n’est l’ajout d’un attribut de type ClasseD dans la définition de la classe E.
Tables correspondantes
Table D :
La table E :
Nous pouvons voir que la structure des tables ne change pas dans ce cas là puisqu’en SQL nous ne précisons pas de sens lorsque nous définissons une relation entre 2 tables contrairement à UML.
Nous venons de voir comment définir une relation OneToOne entre 2 classes persistantes mais dans beaucoup de cas, il pourra être plus judicieux d’embarquer les 2 classes dans une seule table pour des raisons de performances. Vous trouverez dans l’article Deux classes dans une table un exemple concret vous montrant comment utiliser une classe embarquée dans la table de celle à laquelle elle est liée.
Crée par: chris
Créé le: 19 septembre 2015
Modifié le: 19 septembre 2015
Nombre de visites: 2084
Popularité: 31 %
Popularité absolue: 3
2003-2024 LePpf
Plan du site
| Se connecter |
RSS 2.0 |
Sur YouTube
Visiteurs connectés : 0
Nombre moyen de visites quotidiennes sur le site: 213