このスナップショットの領域は最初は理解するのが難しいと思いましたが、ネットでたくさんのブログを読んだ後、理解できるようになりました。 ADO.NETに基づいて理解しています。ADO.NETにはSqlCommandBuilderというクラスがあり、これはADO.NETのHibernateスナップショット領域に相当するものであり、更新時にこのSqlCommandBuilderが実行されます。メソッドが呼び出されると、データベース内の情報を更新できます (更新と削除を含む)。 重要な列挙クラスの 1 つは行ステータス ビット RowState クラスです。この行ステータス ビットを Hibernate (キャッシュ領域とスナップショット領域の比較) と比較します。対応するものとして。ただし、キャッシュ領域をリフレッシュする場合、Hibernate はキャッシュ領域とスナップショット領域の内容を比較します (
相違が見つかった場合は、スナップショット領域を更新し、更新 SQL ステートメントを保存します。リフレッシュ操作でない場合)。 、ただし、トランザクション操作を送信するため、updata ステートメントが保存されるだけでなく、updata を実行するために SQL がデータベースに送信されます)、ADO.NET は比較を実行しませんでしたが、それを記録しました(つまり、行の RowStae 値を変更します)、最後に SqlCommandBuilder がこのステータス ビットと主キーに基づいてデータベースを更新します。実際、ある観点から見ると、比較も一種の記録です (行ステータスの変更と同様です)。ビット)、トランザクションが送信されるまで、トランザクションはデータベースに更新されます。
スナップショットをデータベースのスナップショットとして理解していることを付け加えておきます (最初はデータベースの特定の行のスナップショットであり、その後突然の操作の後、データベースのスナップショットではなくなりますが、トランザクションが送信されると、再びデータベースのスナップショットになります。)
SqlCommandBuilder については、こちらのブログをご覧ください
【SQLCommandBuilder クラス】
もあります。 this class【RowSate class】
十分に明確に説明できていないかもしれませんが、これが私の現在の理解です。以上がHibernate の 1 次キャッシュとスナップショット領域について理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。