0

注釈を使用すると、代わりに@Fetch(FetchMode.SELECT)使用できる理由を誰かが説明できますか? のような他の fetchmode タイプを使用することによる違いはどれですか?ListsSetsSUBSELECT

以下にサンプルコードを示します。

class One{
   ..
   @Fetch(FetchMode.SELECT)
   @OneToMany(mappedBy="one", fetch = FetchType.EAGER, ... )
   private List<Something> listOne = new ArrayList<Something>();

   @Fetch(FetchMode.SELECT)
   @OneToMany(mappedBy="one", fetch = FetchType.EAGER, ... )
   private List<SomethingElse> listTwo = new ArrayList<SomethingElse>();
   ...
}

このように機能しますが、理由を知りたいです....代替ソリューションに関する他の議論を見つけましたが、これは優先されるものではありませんでした...

4

2 に答える 2

2

公式ドキュメントは、あなたの質問に対する答えを見つけるのに最適な場所だと思います. このリンクを見てください。

SELECT: 個々のエンティティ、コレクション、または結合ロード JOIN ごとに選択を使用します

JOIN: 外部結合を使用して、関連するエンティティ、コレクション、または結合をロードします

SUBSELECT: 副選択クエリを使用して、追加のコレクションをロードします

于 2012-08-22T13:27:24.300 に答える
0

コレクションのインターフェースとして、Listまたはフェッチとは何の関係もありません。Set

@Fetch(FetchMode.SELECT)と一緒にfetch = FetchType.EAGER、エンティティをロードした後、One休止状態はすぐにリストをロードするための2番目の選択を発行することを意味します。

@Fetch(FetchMode.SUBSELECT)withoutfetch = FetchType.EAGERは、最初のリストelement()にアクセスするときに、hibernateがすべての1つのエンティティ(コレクションの一部である可能性もあります)の副選択を含むリストをロードすることを意味しList<SomethingElse>ます。

于 2012-08-22T13:49:02.513 に答える