4

私はいくつかのJPAのものを機能させようとしています。別のテーブルへの外部キーを持つテーブルがあります。JPAエンティティを生成すると、それらの変数に対して1対多の注釈が付けられます...結果セットにすべてのテーブルを戻すために他に何をする必要がありますか?私が本当にそれを呼ぶなら。これが私がやろうとしていることの例です。

@OneToMany(mappedBy="resourceId")
private List<DistributionLink> distributionLinkCollection;

@OneToManyアノテーションはかなり座っています...

すべての値を取り戻すことを考えています。このテーブルを呼び出す名前付きクエリを呼び出す必要がありますか?

qLaunchArr = (QuickLaunch[])emf.createNamedQuery("QuickLaunch.getQuickLaunch").getResultList().toArray();

すべての結果セットを含むDistributionLinksの配列も取得すると考えるのはベースから離れていますか?これは、EagerLoadingとLazyLoadingの関係に関係していることがわかりました。正確には、わかりません。遅延読み込みでは、明示的に呼び出された@oneToMany属性のみが読み込まれることを知っていますか(私は思います)?必要なコレクションをすべて取り戻すにはどうすればよいですか。結果セットをループし、名前付きクエリを呼び出して、名前付きクエリを使用してすべての結果セットを取得する必要がありますか?

ありがとう。

4

1 に答える 1

6

まだトランザクションコンテキストにあるかどうかに応じて遅延読み込みを選択した場合、ゲッターを使用して子コレクションをフェッチすると、JPAが自動的にそれをフェッチする必要があります。したがって、データが親オブジェクトをフェッチしたエンティティマネージャを持つセッションBeanを離れる場合、遅延ロードされたコレクションを自動的にインスタンス化することはできません。

EAGERフェッチ戦略を使用することを選択した場合、そのコレクションの各インスタンスは事前にインスタンス化され、どこでも利用できるようになります。

設計上の決定を制約することを回避できる(ただし、遅延読み込みを利用して、これらのレコードのすべてのフェッチで不要なものを読み込むことを回避できる)優れた妥協案は、フェッチするBean内のこれらのコレクションのみを処理することです。親エンティティは、そのコレクションが必要になることが事前にわかっている場合は、クエリに固執します。

JOIN FETCH distributionLinks
于 2012-04-12T17:35:53.410 に答える