非常に簡単: する
person.getVersion() + 1
笑顔ですか?しかし、これはまさに hibernate が version プロパティで行っていることです。
データベースへの更新時に、hibernate はデータベースからレコードをリロードし、バージョン値を Java オブジェクトのバージョン値と比較します。それらが同じである場合、hibernate はバージョン値を 1 つ増やし、新しいレコードをデータベースに保存します。そうでない場合、例外をスローします。その間に他のアプリケーションがレコードを変更した場合、変更された値を上書きしてはならず、アプリケーションはデータを再読み込みして新しい値を変更する必要があります。
確かに、Java オブジェクトの値が変更されたときに、最初に hibernate がバージョン値を変更する可能性があります。ただし、値が変更されるたびに、hibernate はオブジェクトが変更されているかどうかを確認する必要があり (新しい値は古い値と同じである可能性があります。この場合、更新は必要ありません)、バージョン値が既に変更されているかどうかをマークする必要があります。増加するかどうか。何も勝てないのに、なぜこれをするのですか?
ところで、hibernate は save() の瞬間にデータベース レコードを更新するのではなく、flush() または commit() の瞬間に更新します。これにより、パフォーマンスを向上させるためにデータベース ステートメントの順序を変更できるからです。