2011-01-31 14 views
0

私はいくつかのオブジェクトを休止状態でマップしています。Hibernateマッピングの問題

Aが1件のB

Bは、多くのC

私はそれをCsのリストを与える、Bを作成し、AにBを設定し、それを保存して、すべてがデシベルで適切な場所に行くを持っていました。私はBを取得する場合

、私は呼び出すことができますb.getCs()およびCsがあります。クール。

私の問題は、私はAを取得するとき、Bがあるが、私は()a.b.getCsを呼び出すときに、私は次のエラーを取得する、次のとおりです。これが機能しない理由

org.hibernate.LazyInitializationException - could not initialize proxy - no Session - 10890

誰でも知っていますか?

+3

遅延ロードの問題は、Hibernateでの非常に一般的な問題です。 Stackoverflowにはこれに関する質問と回答がたくさんありますので、そこに検索フィールドを使用することをお勧めします.../ – skaffman

+0

FetchType – fsonmezay

+0

を確認する必要があります。どのようにしてgetCs()とgetB()を使用していますか? FetchType?どのような操作をしていますか?等... –

答えて

0

無効に遅延ロードは、mappping、この

<hibernate-mapping default-lazy="false"> 

を試してみてくださいしかし、これを使用するときには、これはあなたのプログラムが非常に遅くなりますよう、あなたのパフォーマンスの問題を考慮する必要があります大きなクエリの結果に基づいて

アノテーションを使用している場合:

@ManyToOne(fetch=FetchType.LAZY) 
public List<A> getAllA(){ 
    //this is your method to get all A's list 
} 
0
は、BS上のCのレイジーロードを無効にするには、あなたのマッピングを変更し

。もちろん、多数のBsを同時に取得しようとすると、パフォーマンスが低下します。あなたのマッピングのためのXMLを使用している場合に

0

あなたがアプリケーションの種類については言及しませんでした。 Webアプリケーションの場合は、View(https://community.jboss.org/wiki/OpenSessionInView)でOpen Sessionを使用することを検討してください。それはまた助けるかもしれません。

関連する問題