Au début, je pensais que cette zone d'instantanés était difficile à comprendre. Après avoir lu de nombreux blogs en ligne, j'ai commencé à comprendre. Je le comprends basé sur ADO.NET. Il existe une classe dans ADO.NET appelée SqlCommandBuilder À mon avis, c'est la chose correspondant à la zone d'instantané Hibernate dans ADO.NET. Ce SqlCommandBuilder peut créer une instruction SQL, et lors de la mise à jour. Lorsque la méthode est appelée, les informations de la base de données peuvent être mises à jour (y compris la mise à jour et la suppression). L'une des classes d'énumération essentielles est la classe RowState du bit d'état de la ligne. Je combine ce bit d'état de la ligne avec Hibernate La comparaison (comparer la zone de cache et la zone d'instantané). ) est considéré comme correspondant. Cependant, lors de l'actualisation de la zone de cache, Hibernate effectue une comparaison du contenu de la zone de cache et de la zone d'instantané (
S'il trouve une différence, il met à jour la zone d'instantané et stocke une instruction SQL de mise à jour. S'il ne s'agit pas d'un opération d'actualisation, , mais soumet l'opération de transaction, alors non seulement l'instruction de mise à jour sera stockée, mais également le SQLsera envoyé à la base de données pour exécuter la mise à jour), mais ADO.NET n'a pas comparé, mais enregistré ( c'est-à-dire que la valeur de la ligne RowStae a été modifiée), et enfin SqlCommandBuilder met à jour la base de données en fonction de ce bit d'état et de cette clé primaire. En fait, d'un certain point de vue, la comparaison est également une sorte d'enregistrement (similaire à la modification du bit d'état de la ligne). . Jusqu'à ce que la transaction soit validée, elle est mise à jour dans la base de données.
Ajoutez une phrase, je comprends qu'un instantané est un instantané de la base de données (initialement un instantané de certaines lignes de la base de données, puis après une seule opération, c'est n'est plus un instantané de la base de données) Il s'agit d'un instantané, mais une fois la transaction validée, il devient un instantané d'une partie des lignes de la base de données.)
Pour plus d'informations sur SqlCommandBuilder, vous pouvez lire ce blog
[Classe SQLCommandBuilder】
Il y a aussi cette classe[Classe RowSate ]
Peut-être que je ne l'ai pas expliqué assez clairement, mais c'est ma compréhension actuelle.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!