123 votes

Quelle est l'utilisation de session.flush () dans Hibernate

Lorsque nous mettons à jour un enregistrement, nous pouvons utiliser session.flush() avec Hibernate. Quel est le besoin de flush() ?

153voto

Pascal Thivent Points 295221

Rinçage de la session forces d'Hibernation pour synchroniser l'état de la mémoire de l' Session avec la base de données (c'est à dire à écrire les changements à la base de données). Par défaut, Hibernate va vider les changements automatiquement pour vous:

  • avant que certains d'exécutions de requêtes
  • lorsqu'une transaction est validée

Permettant explicitement de le rincer à l' Session donne plus de contrôle qui peut être nécessaire dans certaines circonstances (pour avoir une ID affecté, pour contrôler la taille de la Session,...).

80voto

Kaushik Lele Points 893

Comme dit à juste titre dans les réponses ci-dessus, en appelant flush (), nous forçons hibernate à exécuter les commandes SQL sur la base de données. Mais comprenez que les changements ne sont pas encore "engagés". Ainsi, après avoir effectué le vidage et avant la validation, si vous accédez directement à la base de données (par exemple à partir de l'invite SQL) et vérifiez les lignes modifiées, vous ne verrez PAS les modifications.

Ceci est identique à l'ouverture de 2 sessions de commande SQL. Et les modifications effectuées en 1 session ne sont visibles pour les autres que lorsqu'elles sont validées.

31voto

Shoaib Chikate Points 2772

Je sais seulement que lorsque nous appelons session.flush() de nos déclarations sont à exécuter dans la base de données, mais pas commis.

Supposons que nous n'avons pas d'appel flush() méthode sur l'objet de la session et si nous appelons la méthode de validation....il sera interne de la faire le travail d'exécution de requêtes sur la base de données et puis commettre.

commit=flush+commit (dans le cas de la fonctionnalité)

Donc,j'en conclus que, lorsque nous appelons la méthode flush() sur l'objet de Session puis il ne va pas s'engager mais en hits la base de données et exécute la requête et obtient de restauration trop

Dans le but de commettre nous utilisons commit() sur l'objet de la Transaction

14voto

miku Points 63392

Rinçage de la Session obtient les données qui sont actuellement dans la session synchronisée avec ce qui est dans la base de données.

Plus sur le site web Hibernate:

flush() est utile, car il n'y a absolument aucune garantie à propos de quand la Session exécute les appels JDBC, seul l'ordre dans lequel ils sont exécutés - sauf que vous utilisez flush().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X