「Apress - 初級者から上級者への Hibernate の開始」より p. 161 では、バッグ コレクションについて説明しています。
要素に適切なキーがない場合、バッグの内容に対して更新または削除操作が実行されたときにパフォーマンスに影響が現れます。
適切なキーとはどういう意味ですか?
バッグ要素に対して更新または削除操作を実行すると、パフォーマンスに影響があるのはなぜですか?
「Apress - 初級者から上級者への Hibernate の開始」より p. 161 では、バッグ コレクションについて説明しています。
要素に適切なキーがない場合、バッグの内容に対して更新または削除操作が実行されたときにパフォーマンスに影響が現れます。
適切なキーとはどういう意味ですか?
バッグ要素に対して更新または削除操作を実行すると、パフォーマンスに影響があるのはなぜですか?
エンティティの親があり、子のコレクションがあるとします。リストにインデックス付きの列を使用せずに、Hibernateは子のコレクションを処理するために「BagSemantics」を使用します。これは、コレクションが順序付けられておらず、重複が含まれている可能性があることを意味します。子を削除するときにSQLログを見ると、すべての子を削除するdeleteステートメントが表示されます。子の数が続きます-1つの挿入により、削除されていないすべての子が再挿入されます。なぜ単一の削除ステートメントだけではないのですか?
完全な説明については、このリンクを参照してください(http://assarconsulting.blogspot.com/2009/08/why-hibernate-does-delete-all-then-re.html)。
明らかに、単一の削除ステートメントの方が効率的ですよね?ほとんどの場合、エンティティは通常一意であるため、実際にはセットが必要です。ただし、多くの開発者はまだリストを使用しています(習慣から)。デフォルトでは、インデックス付きの列がないリストの場合、hibernateはBag Semanticsを使用するため、パフォーマンスが低下します。
それらは、基礎となる db テーブルの主キーを意味します。キーがないためにパフォーマンスが低下するため、キーが存在する場合はインデックス シークに対してテーブル スキャンが必要になります。