1

データベース内にオブジェクトの大きなツリーを格納するための最良の方法は何でしょうか。これまでのところ、私は次のことをしています:

@Entity
class Element1 {
    @OneToMany(fetch=FetchType.LAZY)
    Collection<Element2> elements;
    ....
}

Element2は必ずしも必要ではなく、実際には巨大になる可能性があるため、フェッチタイプはLAZYに設定されます(他の要素のコレクションのコレクションのコレクション)。

問題は、サーブレットからElement2タイプの要素を取得すると(セッションが閉じられる)、(もちろん)怠惰な例外が発生することです。最初の解決策は、クエリ内で要素のコレクションを熱心にフェッチすることですが、それをいつ実行するかをどのように知ることができますか?メソッドを作成する必要がありますか:

Element1 get(Integer Id);
Element1 getEager(Integer Id);

Element1からフィールド要素を削除してマッピングを「逆」にできるかどうか疑問に思っていました。

class Element2 {
     @ManyToOne
     Element1 owner;

     .....
}

そして、2つの方法があります:

Element1 get(Integer Id);
Collection<Element2> getElements(Element1 owner);

そのようなことをするための最良の方法は何ですか?

ありがとうございました !!

4

1 に答える 1

1

質問で説明したことはすべて実行できますが、2 番目のオプションは私が行うことではありません。element1 から element2 のリストに移動する必要がある場合、OneToMany 関連付けを行うことは、当然のことであり、当然のことです。関連付けは双方向であることに注意してください。親から子への移動と、子から親への移動を同時に選択できます。

私はあなたの最初の解決策に行きます: element1 を返すだけのメソッドと、その子と共に element1 を返す別のメソッドです。ただし、メソッドにはより意味のある名前を選択します。

于 2012-06-12T18:49:39.467 に答える