データベース内にオブジェクトの大きなツリーを格納するための最良の方法は何でしょうか。これまでのところ、私は次のことをしています:
@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);
そのようなことをするための最良の方法は何ですか?
ありがとうございました !!