19.5.2. 更新にもっとも効率的なコレクション list、map、idbag、set
上での議論から、インデックス付きコレクションと set は要素の追加、削除、更新でもっとも効率的な操作が出来ることは明らかでしょう。
ほぼ間違いなく、多対多関連や値のコレクションにおいて、インデックス付きコレクションが set よりも優れている点がもう一つあります。
Set
はその構造が原因で、Hibernate は要素が「変更」されたときに行を決して UPDATE
しません。Set
への変更は常に各行のINSERT
と DELETE
によって行います。繰り返しますが、これは一対多関連には当てはまりません。
配列は遅延処理ができないという決まりなので、結論として、list、map、idbag がもっともパフォーマンスの良い(inverse ではない)コレクションタイプとなります。set もそれほど違いはありません。Hibernate のアプリケーションでは、set はコレクションのもっとも一般的な種類として考えることができます。これは、「set」の表現が関連モデルでもっとも自然だからです。
しかし、よく設計された Hibernate のドメインモデルでは、通常もっとも多いコレクションは事実上
inverse="true"
を指定した一対多関連です。これらの関連では、更新は多対一の関連端で扱われ、コレクションの更新パフォーマンスの問題は単純に当てはまりません。