Cet article décrit comment définir une relation de type 1,1 entre 2 classes puis, montre comment mapper ces 2 classes dans une table unique de la base de données.
Une relation de type 1,1 entre 2 classes est sans doute le type de relation le plus simple à définir mais il peut être utile de connaître les différentes possibilités que propose JPA pour créer une base de données le plus efficacement possible.
L’exemple que nous allons utiliser va être le cas d’une relation entre un client et son adresse que l’on pourrait représenter à l’aide du diagramme suivant :
Ce diagramme de classes modélise le fait qu’un client est domicilié à une adresse et une seule.
Nous allons maintenant traduire nos 2 classes en langage Java mais comme nous désirons qu’elles soient persistantes, JPA nous impose qu’elles aient un identifiant et la classe Adresse n’en possède pas. On va donc ajouter un attribut numérique nommé id qui servira d’identifiant à notre adresse.
Créons maintenant nos classes Java correspondant à ce diagramme de classes.
La classe Adresse pourrait correspondre code suivant (extrait) :
Rappel : Seules les annotations @Identity et @id sont obligatoires. @GeneratedValue précise que l’identifiant sera crée automatiquement, @Table et @Column permettent de définir un formalisme différent entre le nommage Java et SQL .
La classe Client pourra être défini par le code suivant :
Si l’on demande la génération de la base, nous obtenons les tables suivantes :
et
Nous obtenons dans la table des clients, un champ ADRESSE_ID qui correspond à l’identifiant de l’adresse du client se trouvant dans la table T_ADRESSE_ADR. Il s’agit d’une clé étrangère.
On peut ajouter quelques annotations sur l’attribut Adresse. On peut préciser que les opérations de suppression etc... sur la table des clients se répercutent en cascade sur la tables des adresses. Avec l’annotation @JoinColumn on va pouvoir préciser le nom du champ et imposer qu’il ne soit pas nul pour qu’un client ait obligatoirement une adresse.
Si on relance la génération de la base, on vois par exemple que le nom du champ a changé et que Null est passé à NO.
Crée par: chris
Créé le: 27 mai 2015
Modifié le: 18 septembre 2015
Nombre de visites: 1158
Popularité: 13 %
Popularité absolue: 2
2003-2024 LePpf
Plan du site
| Se connecter |
RSS 2.0 |
Sur YouTube
Visiteurs connectés : 1
Nombre moyen de visites quotidiennes sur le site: 200