Hibernate relation OneToOne

0
516

Nous avons vue comment créer une relation entre nos entités (class) et notre base de données grâce à l’annotation qu’Hibernate va par la suite utilise pour créer le code JDBC nécessaire afin de registrer nos entités dans la base de données.

Mais nous avons pour le moment uniquement utilisée des simples entités qui ne comporte pas d’autre entité car là cela devient un peu plus compliquer et nous allons voir comment cela fonctionne dans une simple relation 1 à 1 ou OneToOne en ajoutant une entité address a notre client.

Création de l’entité Address

Nous allons commencer par créer une nouvelle entité Address ou nous allons placer les propriétés qui vont constituer notre address et n’oublier pas les setters et getters et placer aussi un ToString afin d’afficher dans la console le résultat si besoin.

Ici quelque chose de nouveau le @GeneratedValue qui va nous permettre de créer automatiquement notre numéro d’identification.  Cette annotation nous allons aussi la placer dans notre entité customer.

Ajouter l’address au client

Dans notre entité customer nous allons ajouter l’entité address et ici aussi nous allons ajouter le setter et getter pour cette propriété et nous allons aussi ajouter une méthode toString.

Puis nous allons créer une address et l’ajouter à notre client dans notre main et voir ce qu’il se passe

Nous avons une erreur car Hibernate ne comprend pas ce qu’il doit faire avec l’entité adresse qui se trouve dans l’entité client. Nous allons tenter d’indiquer à Hibernate qu’il s’agit d’une relation du type OneToOne car dans notre exemple un client à une adresse.

Cette relation OneToOne nous allons l’indiquer avec une annotation dans l’entité Customer.

Aller on relance notre application et boem ……… une nouvelle erreur

Nous avons un nouveau problème car on ne peut pas placer une adresse qui n’existe pas encore donc ici nous avons deux solutions.

Associer l’address première méthode.

La première méthode consiste à sauvegarder l’address en premier et puis l’associer à notre client. Pour faire cela nous allons devoir créer un DAO qui va sauvegarder une adresse dans la base de données et rien d’autre pour le moment.

Alors on va le garder simple et ne pas faire de contrôle si l’adresse existe déjà nous allons simplement mettre à jour l’adresse avec un merge et s’il ne trouve pas alors le merge le créera.

Une fois cela fait on peut créer notre address et l’associer à notre client. Comme suite.

Ha cela fonctionne parfaitement. Nous avons le résultat dans la console.

Associer l’address Seconde méthode la cascade.

La seconde méthode est plus simple et ne nécessite pas un dao supplémentaire pour cela nous allons simplement indiquer dans notre relation OneToOne que nous autorisons à l’entité customer de sauvegarder une address dans notre base de données avec le paramètre cascade.

La méthode cascade à plusieurs fonctionnalités comme persist, merge, remove qui nous permet de manipuler l’entité adresse mais si on souhaite tous utiliser alors on indiquer all et c’est ce que nous allons faire.

Désormais nous n’avons plus besoin du addressDAO pour que cela fonctionne.

Conclusion

Grace à l’annotation @OneToOne nous pouvons facilement indiquer à Hibernate que là class associer est une autre entité et avec le paramètre stratégie on peut créer, supprimer, mettre à jour l’objet associer sans devoir utiliser une doa dédier à l’objet.

Dans une prochaine partie nous allons voir comment créer une relation avec des collection d’objet du type OneToMany, ManyToOne ou le ManyToMany

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.