ホームページ  >  記事  >  Java  >  休止状態での fetch=FetchType.LAZY の遅延ロードの失敗の処理例

休止状態での fetch=FetchType.LAZY の遅延ロードの失敗の処理例

黄舟
黄舟オリジナル
2017-09-29 10:24:511548ブラウズ

この遅延読み込みの問題に対処するための最後のアプローチは、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。