Nous avons déjà appris à cartographier les entités associées dans hibernate dans des tutoriels précédents tels que le mappage un-à-un et les mappages un-à-plusieurs. Là, nous voulions enregistrer l’entité mappée chaque fois que l’entité propriétaire de la relation était enregistrée. Pour activer cela, nous avons utilisé l’attribut « CascadeType ». Dans ce tutoriel sur les types de cascade JPA, nous allons en apprendre davantage sur les différents types d’options disponibles pour la cascade via CascadeType.
Comment Fonctionnent les types de Cascade JPA?
Avant d’aller de l’avant, regardons comment cet attribut de type cascade est défini dans votre code. Prenons un exemple pour une compréhension plus claire. Prenons un scénario où un employé peut avoir plusieurs comptes; mais un compte doit être associé à un seul employé. Créons des entités avec un minimum d’informations pour plus de clarté.
EmployeeEntity.java
Comptabilité.java
Regardez la ligne en gras dans le code source ci-dessus pour EmployeeEntity.java
. Il définit « cascade=CascadeType.ALL
» et cela signifie essentiellement que tout changement survenu sur EmployeeEntity
doit également être effectué en cascade sur AccountEntity
. Si vous enregistrez un employé, tous les comptes associés seront également enregistrés dans la base de données. Si vous supprimez un Employé, tous les comptes associés à cet employé seront également supprimés. Assez simple.
Mais que se passe-t-il si nous voulons uniquement enregistrer en cascade les opérations mais pas supprimer l’opération. Ensuite, nous devons le spécifier clairement en utilisant le code ci-dessous.
Maintenant, seulement lorsque les méthodes save() ou persist() sont appelées à l’aide d’une instance d’employé, seuls les comptes seront conservés. Si une autre méthode est appelée en session, son effet n’affectera pas /ne se répercutera pas sur les comptes.
Types de cascade JPA
Les types de cascade pris en charge par l’architecture de persistance Java sont les suivants :
- CascadeType.PERSIST : le type de cascade
presist
signifie que les opérations save() ou persist() se répercutent sur les entités associées. - Type de cascade.FUSIONNER : le type de cascade
merge
signifie que les entités associées sont fusionnées lorsque l’entité propriétaire est fusionnée. - Type de cascade.REFRESH: le type de cascade
refresh
fait la même chose pour l’opération refresh(). - Type de cascade.REMOVE: cascade type
remove
supprime toutes les entités associées associées à ce paramètre lorsque l’entité propriétaire est supprimée. - Type de cascade.DETACH: le type de cascade
detach
détache toutes les entités associées si un « détachement manuel » se produit. - Type de cascade.TOUT : le type de cascade
all
est un raccourci pour toutes les opérations en cascade ci-dessus.
Il n’y a pas de type cascade par défaut dans JPA. Par défaut, aucune opération n’est en cascade.
L’option de configuration en cascade accepte un tableau de types de cascades ; ainsi, pour inclure uniquement les actualisations et les fusions dans l’opération en cascade pour une relation Un-à-plusieurs comme dans notre exemple, vous pouvez voir ce qui suit :
Ci-dessus, la cascade entraînera uniquement la fusion et l’actualisation de la collection de comptes.
Types de cascade Hibernate
Permet maintenant de comprendre ce qu’est la cascade dans hibernate dans quel scénario nous l’utilisons.
En dehors des types de cascade fournis par JPA, il existe une autre opération en cascade dans hibernate qui ne fait pas partie de l’ensemble normal décrit ci-dessus, appelée « suppression orpheline ». Cela supprime un objet possédé de la base de données lorsqu’il est supprimé de sa relation propriétaire.
Comprenons avec un exemple. Dans notre exemple d’entité d’employé et de compte, je les ai mis à jour comme ci-dessous et j’ai mentionné « orphanRemoval = true » sur les comptes. Cela signifie essentiellement que chaque fois que je supprimerai un « compte du jeu de comptes » (ce qui signifie que je supprime la relation entre ce compte et l’employé); l’entité de compte qui n’est associée à aucun autre employé sur la base de données (c’est-à-dire orpheline) doit également être supprimée.
EmployeeEntity.java
Comptabilité.java
TestOrphanRemovalCascade.java
C’est un très bon moyen de supprimer les éléments correspondants / incompatibles d’une collection (c’est-à-dire des relations plusieurs à un ou un à plusieurs). Il vous suffit de retirer l’article de la collection et d’hiberner pour vous occuper du reste des choses. Il vérifiera si l’entité est référencée à partir de n’importe quel endroit ou non; Si ce n’est pas le cas, il supprimera l’entité de la base de données elle-même.
Faites-moi part de vos réflexions et questions sur les types de cascade hibernate 5 ou les types de cascade JPA, le cas échéant.
Bon apprentissage!!
Blog Oracle sur les types de cascade