0

現在、次のようなコードを含むページで LazyInitException が発生しています。

<h:form>
<ui:repeat value="#{searchBean.storiesByTag}" var="iStory">
<ui:repeat value="{iStory.tags}"var="iTag">      
<!-- Lazy init exception here -->
#{iTag.content}
</ui:repeat>
</ui:repeat>
</h:form>

storiesByTag()Listストーリーを取得する Bean メソッドです。2 つ目ui:repeatは、各タグを取得してそのコンテンツを表示することになっています。必要以上のオブジェクトをロードしないように、すべてのフェッチはデフォルトで遅延されます。

私はまだこれについて曖昧ですが、私が理解していることから、これは、リクエスト中にEntityManagerが閉じられている (@Transactionalクラウドから出ている) か、Collectionがアクセスされているために発生する可能性があります。

Spring のOpenEntityManagerInViewFilterSpring がプロジェクトに追加されましたが、正しく機能しているかどうかはわかりません。これをテストするための提案は大歓迎です。

ここCollectionで問題があると思うので、何が良い解決策になるか知りたいです。でDAOメソッドを変更する必要がありfetch joinますか? <f:view beforePhaseListener=...>それとも、Bean 内でメソッドをトリガーし、データベースからいくつかの新しい Tag オブジェクトを取得するために使用するハック ルートを使用する必要がありますか?

編集:Bozhoの場合:

web.xml :

<!-- Open EM in View Filter -->

<filter>
    <filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
    <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- End -->

ローマンの場合:

applicationContext.xml :

<!-- Transaction manager for a single JPA EntityManagerFactory (alternative to JTA) -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" 
        p:entityManagerFactory-ref="entityManagerFactory"/>
4

1 に答える 1

1

エンティティ マネージャ ファクトリの名前は何ですか?

OpenEntityManagerInView ドキ​​ュメントから:

Spring のルート Web アプリケーション コンテキストで EntityManagerFactory を検索します。web.xml で「entityManagerFactoryBeanName」フィルター init-param をサポートします。デフォルトの Bean 名は「entityManagerFactory」です。

「entityManagerFactory」とは異なる名前を指定した場合、フィルターはファクトリーを認識しません。

于 2010-03-05T12:10:09.833 に答える