Maison  >  Article  >  Java  >  Dois-je utiliser `session.persist()` ou `session.save()` dans Hibernate ?

Dois-je utiliser `session.persist()` ou `session.save()` dans Hibernate ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 22:10:03379parcourir

 Should I use `session.persist()` or `session.save()` in Hibernate?

Comparaison des méthodes session.persist() et session.save() d'Hibernate

Dans Hibernate, session.persist() et session. save() sont utilisés pour rendre un objet persistant. Cependant, il existe des différences clés entre les deux méthodes qui ont un impact sur leur comportement dans des scénarios spécifiques.

session.persist() vs session.save()

Définition :

  • persist() : Rend une instance transitoire persistante.
  • save() : Ne garantit pas que l'instance soit persistante immédiatement ou qu'elle attribue un identifiant.

Attribution d'un identifiant :

  • persist() : ne garantit pas l'attribution immédiate d'un identifiant.
  • save() : renvoie un identifiant, ce qui peut nécessiter l'exécution d'une instruction INSERT.

Exigences transactionnelles :

  • persist() : n'exécutera pas d'INSERT en dehors des limites de la transaction.
  • save() : exécute un INSERT immédiatement, même en dehors des transactions.

Implications :

  • Persiste : Garantit l'absence d'INSERT en dehors des transactions, ce qui le rend adapté aux conversations de longue durée avec un contexte de session/persistance étendu.
  • Enregistrer : Attribue un identifiant immédiatement (si nécessaire), quelle que soit la transaction statut, ce qui n'est pas toujours souhaitable dans les conversations prolongées.

Exemple :

Considérons une conversation de longue durée dans laquelle la base de données est rarement mise à jour. L'utilisation de persist() garantit que les objets ajoutés à la session ne seront conservés que lorsque la transaction sera validée. Cela évite les INSERT inutiles et les incohérences potentielles des données.

Conclusion :

session.persist() et session.save() ont des cas d'utilisation spécifiques. persist() garantit la persistance au sein des transactions et évite les INSERT inutiles dans les conversations de longue durée. save(), en revanche, attribue immédiatement des identifiants, ce qui peut être utile pour une utilisation immédiate des valeurs générées mais peut être moins efficace dans certains scénarios.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn