1

このエラーはかなり一般的ですが、検索したところ何も機能していないようです。

Optionエンティティ(childrenOptions、parentOption-遅延ロー​​ドとして)に再帰的な関係があり、次のようにHQLクエリを介してプレーンリストをロードしています:

Session session = sessionFactory.openSession();
session.beginTransaction();

List result = session.createQuery("from Option as o").list();

session.getTransaction().commit();
session.close();
return result;

以前にロードされた他のロールエンティティに依存しているため、Hibernateセッションから手動でユーザーのオプションツリーを構築しようとしています。

そのため、 getChildrenOptions()プロパティを使用してサブオプションを.addしようとすると、 「プロキシを初期化できませんでした-セッションがありません」というエラーが発生します。

私はすでにsession.evict().getHibernateLazyInitializer()。getImplementation( )を試しましたが、

if (option instanceof HibernateProxy)

常にfalseです。

このプロキシの動作を不可能/削除して、通常のPOJOのようなコレクションプロパティを操作することは可能ですか?

すべてのオプションを熱心にロードすることはパフォーマンスの問題のようです。私は自分でツリーを構築したいと思います。

前もって感謝します。

4

1 に答える 1

0

セッションがまだ開いている間にこれらすべてのエンティティを熱心にフェッチするか、返されたリストのコンシューマーに対してセッションを開いたままにし、ツリーの構築が完了したときにのみセッションを閉じる必要があります。遅延読み込みエンティティでいっぱいのリストをロードし、セッションを閉じてから、そのリストをトラバースしてツリーを構築しようとする他のコードにそれを送信しています-もちろん、それは進んでいますセッションがすでに閉じられていると不平を言う。

于 2012-10-02T21:31:23.167 に答える