この遅延読み込みの問題に対処するための最後のアプローチは、Spring が Hibernate 用に提供するサポート クラスを使用することです。その主な意味は、ページ リクエストが開始されたときに Hibernate セッションを開き、このセッションを維持して Hibernate セッションを維持することです。リクエストが終了するまでのサイクルが長くなり、これはフィルターを通じて実装されます。 したがって、Hibernate の遅延読み込み機能を使用し、セッション ライフ サイクルを拡張して (アクション レイヤーを介して) ページにデータを表示したい場合は、次の設定を web.xml ファイルに追加する必要があります。 :
<!-- 配置Spring的用于解决懒加载问题的过滤器 --> <filter> <filter-name>OpenSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>OpenSessionInViewFilter</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>
注: 1) OpenSessionInViewFilter はフィルター名、*.action はすべてのアクションをインターセプトすること、または /*
2) 非 Web ページ要求 (スケジュールされたタスクなど) は次の方法で処理できます。 (Hibernate。initialize(Object proxy) メソッドは読み込みを強制します。これは、lazy=fals に動的に変更するのと同じです)
/** * @Author masl - 2017/9/28 14:22 * @param setRepaymentId * @param initSubs :是否初始化关联表数据 * @return */ @Override public SetRepayment findSetRepaymentById(Integer setRepaymentId, boolean initSubs) { SetRepayment setRepayment = null; if (setRepaymentId != null) { setRepayment = setRepaymentDao.get(setRepaymentId); if (setRepayment != null && initSubs) { Hibernate.initialize(setRepayment.getSetIncomes()); } return setRepayment; } return null; }
以上が休止状態での fetch=FetchType.LAZY の遅延ロードの失敗の処理例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。