Lorsque nous mettons à jour un enregistrement, nous pouvons utiliser session.flush()
avec Hibernate. Quel est le besoin de flush()
?
Réponses
Trop de publicités?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,...).
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.
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
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()
.