1

SchoolStudentエンティティの間に 1 対多のマッピングがあります。

public class School{
   @oneToMany
   private List<Student> students;
 ...
}

Hibernate がデフォルトで学生を遅延フェッチするのは理にかなっていますが、Java ArrayList の代わりに List (PersistantBag) の独自の実装をロードする理由がよくわかりません。

4

1 に答える 1

0

リストは順序付けられたコレクションです。一方、PersistantBag(Hibernate APIによる)は次のとおりです

同じ要素を複数回含むことができる、順序付けされていない、キーのないコレクション。不思議なことに、JavaコレクションAPIにはバッグがありません。ほとんどの開発者は、バッグのセマンティクスを表すためにリストを使用しているように見えるため、Hibernateはこの方法に従います。

言い換えれば、バッグはリスト内のアイテムの単なるランダムなコレクションです。

Hibernateがリストを順序付けられたコレクションとして扱うためには、インデックス列が必要になります(インデックス付きコレクションを参照)。しかし、そのような列がないため、Hibernateは代わりに「バッグセマンティクス」を使用します。結局、開発者であるあなたにはそれほど大きな違いはありません。なぜなら、あなたは順序に依存していない可能性が高いからですが、必要な場合は、これらの機能を取得するためにインデックス列を追加できます。

バッグのもう1つの優れた機能は、コレクション内のオブジェクトの出現回数を取得できることです。一方、リストでは、リスト全体を反復処理してそれを見つける必要があります。

追加リソース:

Hibernateが「すべて削除してから再挿入」する理由-それほど奇妙ではありません

于 2012-10-03T22:48:16.080 に答える