aPPでこの2つの休止状態のアノテーションを使い始めています。
@DynamicUpdate(value=true)
@SelectBeforeUpdate(value=true)
最初に、私がそれについて理解していることを説明して、私がそれについて正しいかどうかを知るようにします。
@DynamicUpdate(value=true)
エンティティmodified values
のHibernate needs to track those changes
のみを更新します
@SelectBeforeUpdate(value=true)
select
の前にupdate
を作成して、変更されたプロパティを確認します。これは、エンティティがさまざまなセッションでロードおよび更新された場合に役立ちますHibernate is out of tracking entity changes
この2つの断言は正しいですか?
私の主な関心事はです。
in DB performance
どちらが良いか速いかエンティティ内のすべてのフィールドを一度に更新しますまたはgenerate a select to know which columns update and update only the modified columns?
状況はあなたの状況に依存します。テーブルが非常に単純な場合(外部キーの制約がなく、列が少なく、インデックスが少ない)、レコード全体の更新が高速になります。
ただし、テーブルに多くの外部キー制約とインデックスがある場合は、最初に違いを選択してから更新する方が高速です。これは、PostgreSQLがアップデートの各列に対して次の作業を行う必要があるためです。
さらに、変更によりテーブルが肥大化し、バキュームでクリーンアップする必要があります。
多くのテーブルがあるデータベースでdynamicUpdateを使用し、更新の外観が大きく異なる場合は、キャッシュされたクエリプランの削除を開始することに注意してください。これらの計画は、新たに計算するためのリソースを要します。ただし、キャッシュされたプランは、とにかく同じセッションでの後続のクエリにのみ役立つ可能性があります。