Hibernate Fusionnant et rafraîchissant des entités

Dans le didacticiel précédent, nous avons appris à enregistrer des entités à l’aide des méthodes save() ou saveOrUpdate() dans hibernate. Là, nous avons appris que dans la plupart des cas, vous n’aurez même pas besoin de ces méthodes car hibernate gère automatiquement les mises à jour sur les entités persistantes. Vous devez seulement vous soucier des objets transitoires dans la plupart des cas. Dans ce tutoriel, je discute de quelques réflexions autour des méthodes refresh() et merge() présentes dans la classe de session hibernate.

Actualisation des entités Hibernate À l’aide de la méthode refresh()

Parfois, nous sommes confrontés à une situation où notre base de données d’application est modifiée avec une application / agent externe et donc l’entité hibernate correspondante dans votre application devient en fait désynchronisée avec sa représentation de base de données, c’est-à-dire ayant d’anciennes données. Dans ce cas, vous pouvez utiliser la méthode session.refresh() pour remplir à nouveau l’entité avec les dernières données disponibles dans la base de données.

Vous pouvez utiliser l’une des méthodes refresh() de l’interface de session pour actualiser une instance d’un objet persistant, comme suit:

public void refresh(Object object) throws HibernateExceptionpublic void refresh(Object object, LockMode lockMode) throws HibernateException

Ces méthodes rechargeront les propriétés de l’objet à partir de la base de données, en les écrasant. Dans les applications de la vie réelle, vous n’avez pas besoin d’utiliser la méthode refresh() très souvent en dehors du scénario indiqué ci-dessus.

Regardons un exemple de méthode refresh().

Regardez au-dessus des lignes en surbrillance.

  • Ligne 15 enregistrez l’employé avec le prénom « Lokesh »
  • Ligne 26 définissez le prénom « Vikas ». Comme l’entité est détachée, la base de données ne sera pas mise à jour.
  • La ligne 27 actualise l’entité avec la base de données à l’aide de la méthode refresh().
  • Ligne 32 vérifiez que le firstname défini dans l’entité a été mis à jour avec « Lokesh » car c’est ce que la base de données a en ce moment.

Il s’agissait de la méthode de rafraîchissement. Regardons une autre méthode similaire merge().

La fusion d’entités Hibernate à l’aide de la méthode merge()

Méthode merge() fait exactement le contraire de ce que refresh() fait, c’est-à-dire qu’elle met à jour la base de données avec des valeurs d’une entité détachée. La méthode d’actualisation mettait à jour l’entité avec les dernières informations de base de données. Donc, fondamentalement, les deux sont exactement opposés.

La fusion est effectuée lorsque vous souhaitez qu’une entité détachée passe à nouveau à l’état persistant, les modifications de l’entité détachée migrant vers (ou remplaçant) la base de données. Les signatures de méthode pour les opérations de fusion sont:

Object merge(Object object)Object merge(String entityName, Object object)

La documentation officielle Hibernate donne une très bonne explication de la méthode merge():

Copiez l’état de l’objet donné sur l’objet persistant avec le même identifiant. Si aucune instance persistante n’est actuellement associée à la session, elle sera chargée. Renvoie l’instance persistante. Si l’instance donnée n’est pas enregistrée, enregistrez une copie de celle-ci et renvoyez-la en tant qu’instance nouvellement persistante. L’instance donnée ne devient pas associée à la session. Cette opération passe en cascade vers les instances associées si l’association est mappée avec cascade= »merge ».

Donc, si je prends le code ci-dessous par exemple, les points énumérés ci-dessous devraient être clairs pour vous.

EmployeeEntity mergedEmpEntity = session.merge(empEntity);
  • ‘ empEntity’ est une entité détachée lorsqu’elle est passée à la méthode merge().
  • la méthode merge() recherchera une instance EmployeeEntity déjà chargée avec des informations d’identifiant tirées de empEntity. Si une telle entité persistante est trouvée, elle sera utilisée pour les mises à jour. En d’autres termes, un nouvel EmployeeEntity est chargé dans la session en utilisant les mêmes informations d’identifiant que celles présentes dans ’empEntity’.
  • Les données sont copiées de ’empEntity’ vers une nouvelle entité trouvée/chargée.
  • Étant donné que l’entité nouvelle / trouvée est persistante, toutes les données copiées à partir de ’empEntity’ sont automatiquement enregistrées dans la base de données.
  • La référence de cette nouvelle entité est renvoyée par la méthode merge() et est affectée à la variable ‘mergedEmpEntity’.
  • ’empEntity’ est toujours une entité détachée.

Dans l’exemple ci-dessus, ‘mergedPersistentEmpEntity’ est une nouvelle entité persistante. Donc, si vous voulez changer davantage, entrez dans l’instance ‘mergedPersistentEmpEntity’.

C’est tout pour ce tutoriel couvrant les méthodes merge() et refresh() dans hibernate. Rappelez-vous que la question peut être posée comme différence entre merge() et refresh(), ou différence entre merge() et load() etc. Soyez prêt à rencontrer une telle différence entre les questions d’entrevue.

Bon apprentissage!!

Ce message vous a-t-il été utile?

Faites-nous savoir si vous avez aimé l’article. C’est la seule façon de nous améliorer.
Oui
Non

Dans le didacticiel précédent, nous avons appris à enregistrer des entités à l’aide des méthodes save() ou saveOrUpdate() dans hibernate. Là, nous avons appris que dans la plupart des cas, vous n’aurez même pas besoin de ces méthodes car hibernate gère automatiquement les mises à jour sur les entités persistantes. Vous devez seulement vous soucier…

Dans le didacticiel précédent, nous avons appris à enregistrer des entités à l’aide des méthodes save() ou saveOrUpdate() dans hibernate. Là, nous avons appris que dans la plupart des cas, vous n’aurez même pas besoin de ces méthodes car hibernate gère automatiquement les mises à jour sur les entités persistantes. Vous devez seulement vous soucier…

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.