2011-06-20 17 views
1

Seamでは、サブオブジェクトへのエンティティの参照を読み取るときにLazyInitializationExceptionに問題はありません。関連するエンティティのDAOに特定のクエリを送信するのではなく、必要なデータを読み込むためにリレーションシップツリーを実行することを好むと問題はありますか?私はいくつかの重要なガイドライン/価格を守っていますか?特定のDAOクエリを送信する代わりにエンティティリレーションツリーを実行する

それは本当ではないです

"SeamでLazyInitializationExceptionに問題がない":

答えて

0

はフレーズがいることを考えてみましょう。

シームでは、セッションが長時間実行されている会話の境界内で永続化されているパターンを使用すると、LazyInitializationExceptionに問題はありません。

これは、Seamは、永続コンテキストのように注射し使用することを意味:あなたが理解したら、

@PersistenceContext(type = PersistenceContextType.EXTENDED) EntityManager em; 

ところで:

@In 
private EntityManager entityManager; 

それとも、あなたはステートフルEJBを使用している場合は(あまりにも対話スコープにバインドされました)それは関係ツリーをナビゲートするのに問題はない。 JSFを使用してインターフェイスにバインドする場合は、実際に行う必要があります。

複数の結果を返すクエリでManyToOneまたはOneToMany関係にアクセスすると、速度の問題が発生する可能性があることを考慮してください。これは、基本的に各レコードが返されるたびにデータベースにもう一度ラウンドトリップを実行すると、n+1という問題が発生します。

さんがまとめてみましょう:

  • シングル詳細オブジェクト - >他のオブジェクトの関係ツリー
  • 一覧をナビゲート - > DAOへの単一のクエリがフェッチ参加左使用して作ります。
関連する問題