Heim  >  Artikel  >  Java  >  Beispiele für den Umgang mit fehlgeschlagenem verzögertem Laden von fetch=FetchType.LAZY im Ruhezustand

Beispiele für den Umgang mit fehlgeschlagenem verzögertem Laden von fetch=FetchType.LAZY im Ruhezustand

黄舟
黄舟Original
2017-09-29 10:24:511548Durchsuche

Um dieses Problem des verzögerten Ladens zu lösen, besteht der letzte Ansatz darin, eine von Spring für Hibernate bereitgestellte Unterstützungsklasse zu verwenden. Ihre Hauptbedeutung besteht darin, die Hibernate-Sitzung zu öffnen, wenn eine Seitenanforderung initiiert wird, und diese Sitzung so aufrechtzuerhalten, dass die Hibernate-Sitzung erhalten bleibt Der Lebenszyklus wird länger, bis die Anfrage endet, was durch einen Filter implementiert wird. Wenn wir nun also die Lazy-Loading-Funktion von Hibernate nutzen und außerdem den Lebenszyklus der Sitzung verlängern und die Daten auf der Seite anzeigen möchten (über die Aktionsebene), müssen wir die folgende Konfiguration zum Web hinzufügen. xml-Datei:


    <!-- 配置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>

Hinweis: 1) OpenSessionInViewFilter ist der Filtername, *.action bedeutet das Abfangen aller Aktionen, oder /*

2) Nicht-Webseitenanforderungen (z. B. geplante Aufgaben) können auf folgende Weise verarbeitet werden (die Methode Hibernate.initialize(Object Proxy) erzwingt das Laden, was einer dynamischen Änderung von lazy=fals entspricht)


/**
 * @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;
}

Das obige ist der detaillierte Inhalt vonBeispiele für den Umgang mit fehlgeschlagenem verzögertem Laden von fetch=FetchType.LAZY im Ruhezustand. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn