0

モジュールをコアアプリケーションにプラグインする機能を提供するJava Webアプリケーション(コアアプリケーション)をすでに実装しています。org.hibernate.LazyInitializationException could not initialize proxy - no Sessionリフレクションを使用して Java オブジェクトのプロパティを反復処理しようとすると、例外が発生します。

lazy="false"休止状態のマッピング ファイルの属性を使用して熱心な読み込みを有効にすることで、これを解決できることがわかりました。しかし、休止状態のマッピング ファイルはコア コード内にあるため、そうしたくありません。

そして、私はこれで解決策を試しました、どちらも役に立ちませんでした。同じエラーが発生しました。

実行時にこの問題を解決する他の方法はありますか? 貴重な思いを大切に。

4

4 に答える 4

0

このエラーは、休止状態の現在のセッションにバインドされていないオブジェクトにアクセスしようとしたときに発生します。

次のように、遅延初期化されたデータをロードできます。

Hibernate.initialize(YOUR_OBJECT.GETTER_METHOD_OF_YOUR_LAZY_LOADDED_ATTRIBUTE)

トランザクションがクローズされる前に初期化できます。

于 2013-09-16T07:47:42.580 に答える
0

トランザクションの外でオブジェクト メソッドを呼び出そうとしているのではないかと思います。オブジェクトを遅延ロードするには、プロキシの呼び出しをトランザクションに挿入する必要があります。

于 2013-09-16T06:27:51.460 に答える
0

OpenSessionInView一般にパターンとして知られているものを実装する必要があります。

これは SevletFilterを使用して実装され、構成方法は、Web レイヤーで Spring などの他のフレームワークを使用しているかどうかによって異なります。

典型的な実装では、Spring のOpenSessionInViewFilterようなものを利用します

<filter>
    <filter-name>SpringOpenSessionInViewFilter</filter-name>
    <filter-class>
       org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    </filter-class>
</filter>

<filter-mapping>
    <filter-name>SpringOpenSessionInViewFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

これはFilterweb.xml. Spring を使用してセッション ファクトリを構築している場合は、次のFilterように構成する必要があります。

<init-param>
    <param-name>sessionFactoryBeanName</param-name>
    <param-value>sessionFactory</param-value>         
</init-param> 
于 2013-09-16T07:12:28.477 に答える
0

トランザクション外でオブジェクトを使用しています。

もちろん、Naresh が示唆したように、Hibernate.initialize(lazyObject) を使用して、トランザクションの外部でオブジェクトを使用する前に遅延フィールドのフェッチを強制することができ、それは機能するはずです。ネイティブ クエリ、HQL、Hibernate Worker を使用して、トランザクションの外部にアクセスする前に必要なすべてのフィールドをフェッチすることも機能するはずであり、Hibernate.initialize() を使用するよりも優れたソリューションである可能性があります。データベースにより優れたクエリを作成できます (パフォーマンスが向上します)。 .

OpenSessionInView を使用すると、ビューからセッションにアクセスできます。遅延読み込みが有効になっている遅延フィールドへのアクセスは、このソリューションで機能します。ただし、ビューからセッションへのアクセスを有効にすることのすべての影響を考慮する必要があります。ビューで操作する前に必要なフィールドを知っておく必要があるため、これは悪い習慣であると考える人もいます。クエリを開始するのはビューの役割ではありません。それでも、それは良い「回避策」になる可能性があります。必要に応じて慎重に選択してください。

于 2013-09-16T09:44:35.873 に答える